我有两个objc .m类,我们将它们称为controller1.m和controller2.m。在controller1.m和controller2.m中我都有UIAlertController的实例,如下所示:
controller1.m
left = -canvas.clientHeight / 2, right = canvas.clientWidth / 2, top = -canvas.clientHeight / 2, bottom = canvas.clientHeight / 2
controller2.m
@implementation controller1
UIAlertController *alertController;
//more code
@end
当我尝试构建项目时,我收到错误
链接器命令失败,退出代码为1(使用-v查看调用)
错误日志看起来像这样
@implementaion controller2
UIAlertController *alertController;
//more code
@end
我现在更改了实例变量的名称并且它有效...为什么我必须这样做? Xcode是否意识到这些变量以相同的方式使用(由于它们的名称),并且我应该以某种方式将它们全局声明?
答案 0 :(得分:4)
您的问题是这些变量不是实例变量。它们是全局变量。
要使它们成为实例变量,它们需要位于@implementation
块的花括号中,如下所示:
@implementation controller1 {
UIAlertController *alertController;
}
//more code
@end
答案 1 :(得分:1)
如您所知,代码在每个模块中声明一个具有相同名称的全局。要使指针专用于各自的类,请使用属性...
// controller1.m
@interface controller1 ()
@property(strong,nonatomic) UIAlertController *alertController;
// any other property private to controller1
@end
@implementation controller1
// only methods here
@end