无法在Singleton中修改数组

时间:2012-01-19 22:07:38

标签: iphone objective-c xcode

我已经设置了一个Singleton(StackOverflow提供了很多帮助) 但是当我尝试修改/访问数组" listOfHeadings"时,似乎没有任何变化。 我没有收到编译器或运行时的错误或警告。

我在GlobalData.h中得到了这个:

#import <Foundation/Foundation.h>

@interface GlobalData : NSObject {    
    NSMutableArray *listOfHeadings;
}    
@property(nonatomic,retain)NSMutableArray *listOfHeadings;
+(GlobalData*)getInstance;  
@end

这是我的GlobalData.m:

#import "GlobalData.h"

@implementation GlobalData
@synthesize listOfHeadings;
static GlobalData *instance; 

+(GlobalData *)getInstance{    
    @synchronized(self){    
        if(!instance){    
            instance= [[GlobalData alloc] init];
            instance.listOfHeadings=[[NSMutableArray alloc]init]; //EDIT: This line added to resolve problem
        }    
    }    
    return instance;    
}    
@end

我在AppDelegate.m中访问Singleton:

#import "GlobalData.h"
...inside didFinishLaunchingWithOptions...
    GlobalData *globDat=[GlobalData getInstance];
    [globDat.listOfHeadings addObject:@"Message Settings"]; 
    NSLog(@"appdel m array test %i",[globDat.listOfHeadings count]); // prints 0!

很明显我做错了什么 - 有些帮助可以指出我的错误吗? 感谢。

2 个答案:

答案 0 :(得分:1)

listOfHeadings是否有效且已实例化?

(注意:你可以在一个没有Obj-C错误的nil对象上调用方法!)

答案 1 :(得分:1)

您需要具备以下条件:

- (id)init {
    if ( (self = [super init]) ) {
        self.listOfHeadings = [NSMutableArray array];
    }
    return self;
}

- (void)dealloc {
    [listOfHeadings release];

    [super dealloc];
}

创建属性只会使listOfHeadings数组可用于其他类,并确保它不会被删除。您仍然需要创建对象,这在init方法中完成。由于财产被保留,你需要释放它(注意 - 一次不需要自己)以避免泄漏。