2012-06-18 53 views
0

我有下面的代码,当我运行它失败。我的.h文件:iOS初始化一个静态对象的成员失败

@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 

当我运行(无效)初始化的,如果部分,在那里我把注释的应用程序崩溃,但我不“T我不能初始化一个像这样的静态对象的数组吗?我想这是非常基本的东西,但是我在Obj C/iOS上很新,所以请不要对此持不同意见。

非常感谢 你的帮助!

真诚,佐利

回答

1

您写道:

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

这超意味着你呼吁NSObject的,而不是OutlineManager页头。 只需更换与此这一行:

outlnManager = [[OutlineManager alloc]init]; 

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

+0

的作品!但是,当我不能添加一个对象到outlnManager.Outlines在其他.m文件,因为它是空的。它何时变为空。 ARC是否释放它? –

0

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"); 
}