我有一个运行良好的应用程序。然后我尝试将导航控制器嵌入到 tabbarcontroller 中,接下来我知道我在编译期间开始遇到这些错误。
有人知道为什么会发生这些吗?某些设置是否未检查或意外检查?
谢谢,亚历克斯
我有一个运行良好的应用程序。然后我尝试将导航控制器嵌入到 tabbarcontroller 中,接下来我知道我在编译期间开始遇到这些错误。
有人知道为什么会发生这些吗?某些设置是否未检查或意外检查?
谢谢,亚历克斯
似乎您以前工作的代码没有使用 ARC,现在您尝试将其嵌入到使用 ARC 的代码中......使用“编辑->转换->转换为对象-C ARC”重构您的代码
每次翻译都启用 ARC——每个编译的源文件以及它通过包含看到的所有内容都必须遵守 ARC 或 MRC。是的,这些模式可以共存(即您可以为某些文件启用 ARC,但并非所有文件都可以使用,并且您链接到的库也可以使用)。
你有两种模式:
弧
[obj autorelease]
禁止表达。ARC 会为您添加它(除非您有不寻常的引用计数序列)。
在典型情况下,您可以只写:
// a method which returns an autoreleased object
- (NSArray *)something
{
return [[NSArray alloc] initWithObjects:…YOUR_OBJECTS…];
}
然后ARC会autorelease
为你添加。
但是如果你写:
- (NSArray *)something
{
return [[[NSArray alloc] initWithObjects:…YOUR_OBJECTS…] autorelease];
}
在 ARC 中,这将是一个编译错误(就像你的标题中的那个)。
MRC
这是 MRC 表格:
- (NSArray *)something
{
return [[[NSArray alloc] initWithObjects:…YOUR_OBJECTS…] autorelease];
}
您的项目可能默认使用 ARC(即它在 xcconfig、项目级别或目标级别定义),尽管您添加了为 MRC 编写的源文件。
由于该文件被编译为 ARC,因此您可以删除该autorelease
消息或禁用单个文件的 ARC。
错误在新代码上?
在这种情况下,我认为您的项目启用了 ARC,并且当您尝试嵌入时,UINavigationController
您插入了一些非 ARC 代码。
你改编译器了吗?
LLVM 编译器引入了 ARC。如果您正在开发一个非 ARC 项目,那么您可能只是使用 LLVM 编译而破坏了您的代码。
尝试重构代码。检查这个。