在一个 iOS 项目的重构过程中,我遇到了这个 bug。在链接阶段,我收到以下消息:
ld: duplicate symbol _OBJC_IVAR_$_TinCanViewController.currentViewController in /path/to/TinCanViewController-E98A666B7AF2673A.o and /path/to/TinCanViewController-E98A666B7AF2673A.o
据我所知,它似乎声称 TinCanViewController-E98A666B7AF2673A.o
两次声明了指定的符号;两条路径都指向完全相同的 .o 文件。我在那个特定文件上运行了 nm
,它只包含了一次该符号:
00008150 S _OBJC_IVAR_$_TinCanViewController.currentViewController
我对目录中的所有其他 .o 文件运行 nm
以查看它们是否也以某种方式声明了此符号,但事实并非如此。我添加到 TinCanViewController 类的任何成员都会发生这种情况 - 它不是特定于 currentViewController。
我觉得我必须以某种方式与该类链接两次,但我非常勤奋地检查并检查了对该类的所有引用。在重构版本中,基本没有。 AppDelegate 包含它,但现在它基本上只是一个在开始时加载另一个 ViewController 的传递类。项目中没有其他类包含它。
关于可能导致此问题的原因或如何更好地调试它的任何建议?
最佳答案
我在最新的 Xcode 4 上遇到了这个问题。原因:我包含了 file.m
而不是 file.h
可能,您包含了 TinCanViewController.m
(应该是 TinCanViewController.h
)
https://stackoverflow.com/questions/3231948/