【问题标题】:Interface builder no longer generate ARC compliant code for IBOutlets接口生成器不再为 IBOutlets 生成符合 ARC 的代码
【发布时间】:2019-08-20 17:11:27
【问题描述】:

我正在使用 XCode 4.3.2 实现我的第一个 iOS 5.1 应用程序,并且正在试验一种奇怪的 XCode 界面构建器行为。

我在界面构建器中创建了一个带有 NIB 文件的 ViewController,当将任何 UI 对象连接到 ViewController .h 以创建 IBOutlet 属性时,设置插座属性的对话框窗口不显示 Storage 字段。

为了清楚起见,界面生成器显示了这个对话框:

而不是这个:

因此,界面生成器生成的代码如下:

@property (unsafe_unretained, nonatomic) IBOutlet UILabel *labelName;

而我期待的代码是:

@property (weak, nonatomic) IBOutlet UILabel *labelName;

这种行为从几天开始发生,并且仅针对一个项目,所以我怀疑我不小心更改了某些项目设置。

对恢复 XCode Interface Builder 行为以生成 ARC 代码有任何帮助吗?

提前致谢。

【问题讨论】:

  • 它们都是一样的。此外,在我看来是对的……这里有什么问题?
  • 它看起来与UILabel 不同,而不是UILabel*
  • @mattjgalloway 你是对的,我更正了代码
  • 我错过了什么?两条线是相同的。
  • 这两行是一样的。 > 这种行为从几天开始发生并且仅针对一个项目,所以我怀疑我不小心更改了某些项目设置。对早期版本运行 diff,它会告诉你发生了什么变化。

标签: ios xcode interface-builder iboutlet


【解决方案1】:

我敢打赌你的目标是 4.x 对吧?在这种情况下,你不能使用弱,所以它使用 unsafe_unretained。它们是一样的,除了 unsafe_unretained 不会自动为您设置指针,但这对您的用例并不特别重要。

【讨论】:

  • 感谢您的回答。应用目标是 5.x 。这就是为什么我怀疑项目中存在一些错误配置。
  • 你确定吗?我说的是部署目标,而不是你正在使用的 SDK。
  • 是的,iOS 部署目标在项目和目标设置上都设置为 5.0。
  • 嗯,很奇怪。但真的,这对你来说重要吗?
  • 我尝试生成 IBOutlet,然后以 ARC 方式更改了属性声明,它似乎可以工作。所以我可以活下来,但通常我想了解发生了什么! ;-) 这次这种奇怪的 XCode 行为并没有对我的工作产生严重影响,但是明天会发生什么?
【解决方案2】:

您可能在项目/目标设置中关闭了ARC。 切换到Yes,您将返回Storage 字段。

【讨论】:

  • ARC参数在哪个项目设置部分?
  • @Massimiliano 它位于“构建设置”选项卡中。
  • 我检查了项目和目标设置,并在“Apple LLVM 编译器 3.1 - 语言”和“Apple LLVM 编译器 3.1 - 警告”部分找到了 ARC 条目。在这些部分中,ARC 设置为 YES。我是否缺少任何其他 ARC 参数?
  • 是“target”的“build settings”中“compiler”部分的“Objective-C Automatic Reference Counting”设置。如果设置为“是”并且您仍然没有看到“存储”设置,我建议(a)从“产品”菜单中执行“清理”; (b) 您再次转到“构建设置”并单击“验证设置”。让我们知道进展如何。
  • 我听从了您的建议,但行为仍然相同。正如您在其他答案 cmets 上看到的那样,这不是严重影响我工作的问题。这只是为了了解发生了什么,以便获得对开发环境的更多控制权。还是非常感谢。
猜你喜欢
  • 2017-12-03
  • 2011-04-24
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2012-04-04
相关资源
最近更新 更多