1

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

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

大多数重构这些都很简单,XCode 的符号重命名重构工具可以很好地处理它们。

但是对于有问题的 xib 和控制器,在重构之后,存在一些运行时错误,即this class is not key value coding-compliantunrecognised selector错误,它们都命名为旧的IBOutletIBAction名称。

搜索名称时,它们不会出现,并且专门在 xib 中作为 XML 源进行搜索,它们也不会出现。

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

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

(注:所有的IB引用都检查过了,项目也清理了好几次。)

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

ib 属性参考

ib 选择器参考

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

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

在此处输入图像描述

在此处输入图像描述

现在已修复

(不做任何事情,假设缓存保存了符号)

请参阅下面的答案,似乎符号引用被缓存在某处,并且没有其他操作,不再抛出错误(删除旧名称引用时。)

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

4

3 回答 3

1

我以前遇到过这样奇怪的错误并通过

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

  2. 检查 IB 中的每个连接,以免它们链接到旧的东西(don、类别等)

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

希望能帮助到你!

于 2013-02-06T08:38:27.607 回答
1

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

于 2013-05-28T21:16:11.810 回答
0

尽管进行了多次清理和三重检查,grepackXCodeag和 XCode 的项目范围的文本搜索无法找到引发错误的引用。错误仍然存​​在。

然而,今天早上我又试了一次,你瞧,幽灵引用不再抛出错误。

似乎有某种 nib 引用缓存在 Project Clean 之后仍然存在,但在 x 时间后过期。

注意:clean 操作运行了超过 10 次,没有修复错误。

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

于 2013-02-08T00:09:50.353 回答