重复的符号问题

dre*_*www 61 iphone linker symbols objective-c ipad

在iOS项目的重构过程中,我碰到了这个bug.在链接阶段,我收到此消息:

ld:/path/to/TinCanViewController-E98A666B7AF2673A.o和/path/to/TinCanViewController-E98A666B7AF2673A.o中的重复符号_OBJC_IVAR _ $ _ TinCanViewController.currentViewController

据我所知,它看起来声称TinCanViewController-E98A666B7AF2673A.o是两次声明指定的符号; 两个路径都指向完全相同的.o文件.我跑nm了那个特定的文件,它只包括那个符号一次:

00008150 S _OBJC_IVAR _ $ _ TinCanViewController.currentViewController

nm在目录中运行了所有其他.o文件,看看它们是否以某种方式声明了这个符号,但它们不是.这发生在我添加到TinCanViewController类的任何成员 - 它不是特定于currentViewController.

我觉得我必须以某种方式以某种方式与班级联系两次,但我非常刻苦地检查了所有对这门课程的引用.在重构版本中,基本上没有.AppDelegate包含它,但是现在它基本上只是一个直通类,它在开始时加载另一个ViewController.项目中没有其他类包含它.

有关可能导致此问题的原因或如何更好地调试它的任何建议?

Sha*_*eem 238

我在最新的Xcode 4上遇到了这个问题.原因:我包括file.m而不是file.h

可能,你包括TinCanViewController.m(应该是TinCanViewController.h)

  • 对我来说,我有点不同.虽然.m文件在导航器视图中只有一个引用.解决方案是在Targets - > Build Phases下 - > Compiled Sources有两个对.m文件的引用.删除了额外的参考,很高兴去. (15认同)
  • 哇哇!! 你太棒了!!它帮助我浪费了一个小时的时间 (6认同)
  • 非常感谢!节省了我的时间!! 不知道为什么Xcode的自动完成功能给了我.m (2认同)

max*_*wer 31

我发生了这种情况,但我的问题与我们的回购合并问题有关..m文件在一个位置列出两次,它应该只列出一次(在项目中,但不在文件/组结构中,因此您无法在Xcode中看到问题,只有错误).修复程序是在项目文件中打开.pbxproj文件并在该文件中查找重复条目.删除副本后,项目建立就好了.

  • 哦,这是一个伟大的贡献.我怀疑这实际上是我原来的问题,因为我的解决方案是基本上删除文件并重新构建它.我敢打赌,这会产生从.pbxproj文件中清除文件并将其仅添加回一次的副作用.我倾向于将你的标记作为官方答案,但似乎很多人都有.m/.h问题所以我倾向于把那个放在那里. (3认同)

小智 5

我碰巧在项目中包含.h文件和.m文件两次.一旦我删除了第二个副本,错误就消失了.