iOS 初始化静态对象的成员失败



我有以下代码在运行时失败。 我的.h文件:

 @interface OutlineManager : NSObject
    {
            NSMutableArray* mOutlines;
    }
    @property(nonatomic,strong)NSMutableArray* Outlines;

    +(void)initialize;
    @end
    static OutlineManager* outlnManager;

在 .m 文件中:

#import "OutlineManager.h"
@implementation OutlineManager
@synthesize Outlines = mOutlines;
+(void)initialize
{
    outlnManager = [[[OutlineManager superclass]alloc]init];
    if(outlnManager)
    {
        outlnManager.Outlines = [[NSMutableArray alloc]init]; //it crashes here
    }
    NSLog(@"OUTLINEMANAGER INITIALIZED");
}
@end

当我运行(void)初始化时,应用程序在我放置注释的if部分中崩溃,但我不知道为什么。我不能像这样初始化静态对象的数组吗?

我想这是非常基本的东西,但我在 Obj C/iOS 很新,所以请不要反对我。

非常感谢您的帮助!

真诚的,佐利

你写道:

outlnManager = [[[OutlineManager superclass]alloc]init];

该超类意味着您在 NSObject 上调用 alloc,而不是在 OutlineManager 上调用。只需将此行替换为:

outlnManager = [[OutlineManager alloc]init];

哦,你应该在 .m 文件中声明你的静态变量。

OutlineManager.h:

取代

static OutlineManager* outlnManager;

跟:

OBJC_EXPORT OutlineManager* outlnManager;

并添加 OutlineManager.m:

OutlineManager* outlnManager = nil;
+(void)initialize { // you should rename it to an other name.. initialize will be called twice
    outlnManager = [[OutlineManager alloc]init];
    if(outlnManager) {
        outlnManager.Outlines = [[NSMutableArray alloc]init];
    }
    NSLog(@"OUTLINEMANAGER INITIALIZED");
}

最新更新