我试图在插件(NSBundle)中使用Cocoa框架作为弱链接框架,以便我可以在多个插件中使用它。我有框架的源代码,并在另一个插件中成功使用了框架,尽管不是一个弱链接的框架。在这种情况下,它运作良好。
它可以工作,但是当我在我的代码中配置框架的各个方面时尝试使用extern * const属性时,应用程序崩溃并出现以下错误:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000000
框架中声明的常量示例:
Class.h
extern NSString * const AConstant;
实施:
Class.m
NSString *const AConstant = @"someString";
我的应用中导致错误的代码:
NSLog(@"%@", AConstant);
框架正在加载 - 如果我不尝试使用常量,它会按预期工作。我也可以手动使用常量值来配置它,即
[framework setConfig:@"someString"]
而不是我更喜欢使用的东西:
[framework setConfig:AConstant]
如上所述,我可以在必要时修改框架。
有没有人知道如何让这个框架作为weak_framework运行?
答案 0 :(得分:1)
我不确定您的框架问题,但您可以通过仅在头文件中声明字符串来解决您的问题,如下所示:
__unused static NSString *const AConstant = @"someString";
__unused
关键字会停止编译器警告每个包含标头的文件都不使用该常量。唯一的问题是你必须使用正确的[string isEqual: AConstant]
比较,指针比较不会起作用。