iphone - 重复符号问题

在一个 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/

相关文章:

ios - 禁用 UITextField 的自动更正

ios - 检测 iPhone 应用程序中是否存在摄像头?

ios - 如何检查 NSArray 中的对象是否为 NSNull?

ios - UITableViewCell 选中行的文字颜色变化

ios - 永久设置 UITableView 内容插入

ios - 为什么 UIViewController 在 UINavigationBar 下扩展,而

objective-c - 请求访问相机胶卷的权限

iphone - UISegmentedControl 文本以编程方式

ios - 如何在运行时更改约束优先级

ios - 无法从其 DataSource 获取单元格