ios - 使用 objc_setAssociatedObject 时架构 armv7 的 undefined symbol

标签 ios iphone objective-c runtime

这是我得到的运行时错误日志:

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/

相关文章:

iOS 9 swift 2.0 UITextFieldDidChange

ios - iOS 中绝对定位的 Logo 未居中

ios - UITableViewCell 约束未更新

objective-c - 应用核心图像过滤器 - 应用程序崩溃

ios - Swift Delegate 在展开 Optional 值时返回意外发现的 nil

iphone - iPhone上的RSA/ECB/PKCS1Padding解密

iphone - 来自 NSString 的 html 加载

ios - "Potential Loss of Keychain Access"?我可以忽略它吗?为该应用付费的现有应用用户会有问题吗?

iPhone 4.3.3 在启动时显示错误(已贬值) 'zoom-in' 快照(屏幕截图)

objective-c - Cocoa - 内存问题 - NSTableView