Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用objc_setAssociatedObject时,架构armv7的未定义符号_Ios_Iphone_Objective C_Runtime - Fatal编程技术网

Ios 使用objc_setAssociatedObject时,架构armv7的未定义符号

Ios 使用objc_setAssociatedObject时,架构armv7的未定义符号,ios,iphone,objective-c,runtime,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 我试图通过

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

Undefined symbols for architecture armv7:
  "_MyConstantKey", referenced from:
      -[LayoutViewController addLabelsAndButtonInBaseView:withLayoutObject:] in LayoutViewController.o
ld: symbol(s) not found for architecture armv7
我试图通过UIButton选择器传递一个对象

这是我的代码:

以下是我声明变量的方式:

extern const char MyConstantKey;
@interface LayoutViewController : UIViewController
我的实现文件:

#import <objc/runtime.h>

有什么建议吗?是否有我缺少的任何框架,

将变量声明为extern only会提示编译器该变量将在当前编译单元之外的某个地方创建。因此,您需要在实现文件中实际创建它。此外,我认为在这里使用char*而不是char更合适:

// .h
extern const char* MyConstantKey;

// .m 
const char* MyConstantKey = "MyConstantKey"; 

…
objc_setAssociatedObject(componentButton,
                         (void*)MyConstantKey,
                         layout,
                         OBJC_ASSOCIATION_RETAIN);

将变量声明为extern只会提示编译器将在当前编译单元之外的某个地方创建该变量。因此,您需要在实现文件中实际创建它。此外,我认为在这里使用char*而不是char更合适:

// .h
extern const char* MyConstantKey;

// .m 
const char* MyConstantKey = "MyConstantKey"; 

…
objc_setAssociatedObject(componentButton,
                         (void*)MyConstantKey,
                         layout,
                         OBJC_ASSOCIATION_RETAIN);

这样定义自定义属性

#define kCustomProperty @"CustomProperty" 
将对象与该自定义属性关联,如下所示

objc_setAssociatedObject(myObj,kCustomProperty , myData, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
NSObject *aObj = objc_getAssociatedObject(myObj, kCustomProperty);
使用相同的属性和对象获取数据,如下所示

objc_setAssociatedObject(myObj,kCustomProperty , myData, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
NSObject *aObj = objc_getAssociatedObject(myObj, kCustomProperty);

这样定义自定义属性

#define kCustomProperty @"CustomProperty" 
将对象与该自定义属性关联,如下所示

objc_setAssociatedObject(myObj,kCustomProperty , myData, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
NSObject *aObj = objc_getAssociatedObject(myObj, kCustomProperty);
使用相同的属性和对象获取数据,如下所示

objc_setAssociatedObject(myObj,kCustomProperty , myData, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
NSObject *aObj = objc_getAssociatedObject(myObj, kCustomProperty);

您是如何声明MyConstantKey的?@Vladimir extern const char MyConstantKey,请参见头文件中的,我是否应该将其设置为extern const Layout*MyConstantKey?您是如何定义
MyConstantKey
?@NikolaiRuhe正如我从OBJC_导出void OBJC_setAssociated对象(id对象,const void*键,id值,OBJC_AssociationPolicy)中了解的那样:在我的上下文中,对象为componentButton,键声明为MYConstantKey,值声明为布局对象,策略为OBJC_ASSOCIATION_RETAIN…您是如何声明MYConstantKey的?@Vladimir extern const char MYConstantKey,请参见头文件中的,我应该使用extern const Layout*MyConstantKey吗?您是如何定义MyConstantKey的?@NikolaiRuhe,正如我从OBJC_导出void OBJC_setAssociatedObject(id对象,const void*key,id值,OBJC_AssociationPolicy)中所理解的:在我的上下文中,对象是componentButton,键被声明为MyConstantKey,value是布局对象,policy是OBJC_ASSOCIATION_RETAIN…@非常感谢,这是我第一次尝试实现关联功能,基本上我不想保留不必要的类变量/属性。有任何副作用吗。或者说使用它们的缺点,我应该记住的指针是什么:例如内存使用、释放(在arc中???)等等,@非常感谢,这是我第一次尝试实现相关功能,基本上我不想保留不必要的类变量/属性。有任何副作用吗。或者说使用它们的缺点,我应该记住的指针是什么:例如内存使用、释放(在arc中???)等等,
objc\u setAssociatedObject()
使用指针本身作为键,而不是字符串的内容。据我所知,不能保证字符串文字在不同位置使用时具有相同的地址。因此,我不推荐这种解决方案。
objc\u setAssociatedObject()
使用指针本身作为键,而不是字符串的内容。据我所知,不能保证字符串文字在不同位置使用时具有相同的地址。因此,我不推荐这种解决方案。