在一个iOS项目的重构过程中,我遇到了一个错误.在链接阶段,我得到了以下信息:

ld:重复符号_OBJC_IVAR_$_TinCanViewController.currentViewController位于/path/to/TinCanViewController-E98A666B7AF2673A中.o和/path/to/TinCanViewController-E98A666B7AF2673A.o

据我所知,它似乎声称TinCanViewController-E98A666B7AF2673A.o在两次声明指定的符号;两条路径指向完全相同的方向.o文件.我在那个特定的文件上运行了nm,它只包含那个符号一次:

00008150 S_OBJC_IVAR_$_TinCanViewController.currentViewController

其他的我都跑了nm分.o目录中的文件,以查看它们是否也以某种方式声明了此符号,但它们不是.这发生在我添加到TinCanViewController类的任何成员身上——它不是特定于currentViewController的.

我觉得我必须以某种方式与该类链接两次,但我已经非常认真地判断了所有对该类的引用.在重构版本中,基本上没有.AppDelegate包含它,但现在它基本上只是一个passthrough类,在开始时加载另一个ViewController.项目中没有其他课程包含它.

关于是什么导致了这种情况,或者我如何更好地调试它,有什么建议吗?

推荐答案

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

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

Objective-c相关问答推荐

iOS 7 表格视图无法自动调整内容插入

当 UITextField 成为第一响应者时如何使 UIScrollView 自动滚动

如何在情节提要中为视图控制器提供标识符?

核心数据 - 如何获取具有最大值属性的实体

如何将 CGPoint 添加到 NSMutableArray?

animateWithDuration:animations: 会阻塞主线程吗?

UIGestureRecognizer 是否适用于 UIWebView?

将 NSNumber 转换为 NSDecimalNumber

如果安装了应用程序,如何以编程方式判断?

如何以编程方式暂停 NSTimer?

参考代码中的内部版本号或版本号

如何判断特定的 ViewController 视图当前是否可见?

为什么是 [object doSomething] 而不是 [*object doSomething]?

首次提交应用内购买以供审核

从 iPhone 设备查找当前国家

为什么 LLDB 不能打印 view.bounds?

无法将 searchBar 设置为 firstResponder

UIDatePicker 中的最小和最大日期

如何为 iPhone 6/7 自定义边到边图像指定尺寸?

无法在 iOS7 上将 UITextField 添加到 UIAlertView ...在 iOS 6 中有效