使用Weakly Linked Framework的extern常量Crash

时间:2012-02-14 09:00:16

标签: objective-c xcode cocoa

我试图在插件(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运行?

1 个答案:

答案 0 :(得分:1)

我不确定您的框架问题,但您可以通过仅在头文件中声明字符串来解决您的问题,如下所示:

__unused static NSString *const AConstant = @"someString";

__unused关键字会停止编译器警告每个包含标头的文件都不使用该常量。唯一的问题是你必须使用正确的[string isEqual: AConstant]比较,指针比较不会起作用。