Проблема с видимостью NSMutableArray / сохранить - PullRequest
1 голос
/ 18 августа 2011

Хорошо, я немного новичок в классе NSMutableArray, и мне кажется, что я упускаю что-то очевидное.У меня есть объект, передающий NSMutable Array моему контроллеру окна, как в my.m:

summaryWindow   = [[SummaryWindowController alloc] init];
[summaryWindow setGlobalStatusArray:globalStatusArray];

У меня есть метод приемника в объекте summaryWindow следующим образом:

-(void)setGlobalStatusArray:(NSMutableArray *)myArray
{

    if ([myArray count] >0) {
        if (globalStatusArray) {
            [globalStatusArray release];
        }
        globalStatusArray = [[NSMutableArray alloc] initWithArray:myArray];

        NSLog(@"Summary Window Init with new array: %@",globalStatusArray);

Iне вижу проблем с NSLog, и в этом же объекте (summaryWindow) у меня есть следующий метод:

- (NSMutableArray *)getGlobalStatusArray
{

    return globalStatusArray;
}

Теперь у меня есть globalStatusArray, объявленный в моем файле .h как

NSMutableArray   *globalStatusArray;

ТакЭто не должно быть сохранено, потому что я использую: initWithArray?

Когда я пытаюсь получить доступ к этому значению в другом методе IBAction:

- (IBAction)refreshButtonClicked:(id)sender
{
    NSLog(@"The user has clicked the update button");
    [ aBuffer addObjectsFromArray: globalStatusArray];
    NSLog(@"Buffer is currently:%@",aBuffer);
    [tableView reloadData];
}

Массив NSMutable имеет значение null

2011-08-18 10:40:35.599 App Name[65677:1307] The user has clicked the update button
2011-08-18 10:40:35.600 App Name[65677:1307] Buffer is currently:(
)

Я пытался использовать свой собственный метод для получения значения, т.е. [self getGlobalStatusArray], но мне не хватает чего-то огромного.FYI aBuffer также объявлен в моем .h,

Ответы [ 2 ]

0 голосов
/ 18 августа 2011

Как отметил Альбертамг, это выглядит как пустой массив, а не как ноль, и освобожденный объект волшебным образом не становится нулевым при нормальных обстоятельствах.

Сильно пахнет двумя разными предметами. Попробуйте зарегистрировать self в своих методах и посмотрите, получает ли один экземпляр массив, а другой взаимодействует с пользовательским интерфейсом.

0 голосов
/ 18 августа 2011

Этот код не делает ничего полезного:

if ([myArray count] >0) {
    if (globalStatusArray) {
        [globalStatusArray release];
    }
    globalStatusArray = [[NSMutableArray alloc] initWithArray:myArray];

Если счетчик старого массива равен нулю, то происходит утечка фактического объекта массива.Если счетчик не равен нулю, он правильно его высвобождает.Просто сделайте релиз и не беспокойтесь о подсчете.

Вы уверены, что на самом деле что-то есть в myArray?

joe

...