我有以下代码在运行时失败。 我的.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");
}