8

我正在为 iOS 目标 5.1 使用 xcode 4.4.1 我已经使用 ARC 开始了我的项目,并且在项目中间我向我的项目中添加了一些非 arc 第三方源。在这一点上,我决定尝试在 xcode 中重构并发生错误。它来自我的原始源代码之一。

我有一个(非原子,弱)的属性,我已经合成了它==> '弱'属性的合成只允许在 ARC 或 GC 模式下。

我很困惑 - 我正在使用弧,它抱怨它只允许在弧中使用?

目前,我已经从其他项目中重构了第三方应用程序并将其复制以供我的项目工作,但以上是我仍然想了解原因的问题。谢谢!(顺便说一句,当我转换为弧时,它说目标当前使用弧)

4

3 回答 3

2

听起来问题在于您已经将其设置为 ARC 项目,并且出于某种原因尝试再次对其进行转换。我只能假设该过程不会因此在此阶段出现弱引用。如果您将它们设置为分配然后转换为 ARC,您会看到它建议您将它们更改为弱。

于 2012-10-23T12:40:25.490 回答
1

我在使用针对 iOS 6.1 的 Xcode 4.6.3 时遇到了同样的症状。我从另一个项目中引入了一个非 ARC 类,并通过 Refactor 菜单对其进行了转换,结果导致后续构建在预先存在的类上失败,并出现您看到的错误(“仅在 arc 或 gc 中允许合成‘弱’属性模式”)。

项目属性清楚地表明它仍然是一个 ARC 项目,但编译器似乎忘记了该类的情况。

我通过将属性设置为“强”并通过“重构”菜单将该类转换为 ARC 来解决此问题。不出所料,它告诉我没有必要进行任何更改,但确实提供了一个我单击的保存按钮。然后我能够将属性改回“弱”并编译项目。(我假设某些元数据在此过程中的某个地方不同步。)

编辑:我最终不得不将其他符合 ARC 的类“重构”为 ARC,因为尽管它们编译它们会生成警告并导致我的应用程序崩溃。我认为这个故事的寓意是,将你的整个项目包括在重构中可能会更安全......

于 2013-08-28T15:51:16.413 回答
-1

改为使用:

@property(nonatomic,assign)

*注意 - 这与弱不同,但非常相似。Weak 还将对象设置为 nil,assign 没有。

于 2012-09-15T16:28:04.397 回答