这是我得到的运行时错误日志:
Undefined symbols for architecture armv7:
"_MyConstantKey", referenced from:
-[LayoutViewController addLabelsAndButtonInBaseView:withLayoutObject:] in LayoutViewController.o
ld: symbol(s) not found for architecture armv7
我正在尝试将一个对象与 UIButton 选择器一起传递。
这是我的代码:
这就是我声明 var 的方式:
extern const char MyConstantKey;
@interface LayoutViewController : UIViewController
我的实现文件:
#import <objc/runtime.h>
以及设置关联对象的相关代码:
UIButton *componentButton = [[UIButton alloc] initWithFrame:baseView.bounds];
objc_setAssociatedObject(componentButton,
MyConstantKey,
layout,
OBJC_ASSOCIATION_RETAIN);
[componentButton addTarget:self
action:@selector(componentButtonPressed:)
forControlEvents:UIControlEventTouchUpInside];
[componentButton setTitle:@"" forState:UIControlStateNormal];
有什么建议吗?有没有我遗漏的框架,
最佳答案
将变量声明为 extern 只会提示编译器该变量可能会在当前编译单元之外的某个地方创建。所以你需要在你的实现文件中实际创建它。另外我认为在这里使用 char* 而不是 char 会更合适:
// .h
extern const char* MyConstantKey;
// .m
const char* MyConstantKey = "MyConstantKey";
…
objc_setAssociatedObject(componentButton,
(void*)MyConstantKey,
layout,
OBJC_ASSOCIATION_RETAIN);
关于ios - 使用 objc_setAssociatedObject 时架构 armv7 的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20740460/