xib参考IBOutlet / IBAction没有被XCode正确重构

时间:2013-02-06 08:26:58

标签: objective-c xcode refactoring

好的,这是一个非常奇怪的错误。我有一个UIViewController子类和一个关联的Xib

它是由外包商最初构建的继承项目的一部分,许多属性和方法都拼写错误的名称,categorys而不是categoriesmerchantes而不是merchants },don代替done等等......

大部分重构都很简单,而XCode的符号重命名重构工具已经处理好了。

然而,对于有问题的xib和控制器,在重构之后,存在一些运行时错误,即this class is not key value coding-compliantunrecognised selector错误,这两个错误都命名为旧IBOutlet和{{1}名字。

当grepping这些名称时,它们不会出现,并且在xib中专门搜索为XML源,它们也不会显示。

我通过添加两个违规符号来解决这个问题,同时保持引用和所有其他对更正名称的调用。 (即旧名称不链接到任何其他代码或xib引用。)

问题是,为什么以及在哪里调用这些旧符号?

(注意:已经检查了所有IB引用,并且项目已经多次清理过。)

这是有问题的参考文献(在IB中正确映射。)

ib property reference

ib selector reference

连接显示在源视图中......

请注意旧引用“navTitleLavel”和“donAction”如果从源中删除它们会引发错误,尽管它们在边距中未显示为已连接

enter image description here

enter image description here

现已修复

(没有做任何事情,假设缓存持有符号)

请参阅下面的答案,看来符号引用正在缓存某处,如果没有其他操作,则不再抛出错误(删除旧名称引用时。)

请注意,这对清洁项目有抵抗力。

3 个答案:

答案 0 :(得分:1)

我之前遇到过如此奇怪的错误并通过

解决了
  1. 清理项目(Command + K)。

  2. 检查IB中的每个连接,以便它们不会链接到旧的东西(唐,类别等)

  3. 重新启动xCode。 (真的退出应用程序并重新启动它)

  4. 希望它有所帮助!

答案 1 :(得分:1)

我也遇到了这个问题,并且简单的清理并不总是足以摆脱可能在您设备上的缓存文件中的其余引用。确保从iOS设备上删除应用程序或重置模拟器,如果简单的清理无法解决问题。

答案 2 :(得分:0)

尽管进行了大量清理和三重检查grepackag和XCode的项目范围内的文字搜索无法找到引发错误的引用。错误仍然存​​在。

然而,今天早上我再次尝试,并且看到鬼引用不再抛出错误。

似乎有一些nib引用缓存在Project Clean之后仍然存在,但在x时间之后到期。

注意:清理操作运行超过10次,而不修复错误。

我还更新了问题,以提供一些说明性细节。