Невозможно изменить массив в синглтоне - PullRequest
0 голосов
/ 20 января 2012

Я установил 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:

#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 ]

1 голос
/ 20 января 2012

Вам необходимо иметь следующее:

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

- (void)dealloc {
    [listOfHeadings release];

    [super dealloc];
}

Создание свойства просто делает ваш массив listOfHeadings доступным для других классов и гарантирует, что он не будет удален.Вам все еще нужно создать объект, что делается в методе init.Так как свойство сохраняется, вам нужно освободить его (обратите внимание - один раз, когда self не требуется), чтобы избежать его утечки.

1 голос
/ 20 января 2012

Действительно ли listOfHeadings действителен и создан?

(Примечание: вы МОЖЕТЕ вызывать методы для нулевого объекта без ошибок в Obj-C!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...