iOS - сброс массива NSMutable вызывает сбой - PullRequest
0 голосов
/ 19 ноября 2010

У меня есть NSMutableArray, который я пытаюсь перезагрузить после асинхронного вызова.При первой загрузке он выглядит следующим образом:

self.sessionProcList = [NSMutableArray arrayWithArray:[result records]];

После того, как пользователь выполнит какое-либо взаимодействие, будет достигнута та же строка для перезагрузки NSMutableArray.Это приводит к сбою

Заголовочный файл имеет:

@interface...
NSMutableArray *sessionProcList;
... }

@property (nonatomic, retain) NSMutableArray *sessionProcList;

Ответы [ 3 ]

1 голос
/ 19 ноября 2010

Скажите, что вы делаете:

NSMutableArray *a = [NSMutableArray arrayWithObject: [[NSObject alloc] init]];
NSObject *o = [a objectAtIndex: 0];
[a removeAllObjects];
[o description]; // *BOOM*

Выше [обычно - иногда нет, но только по совпадению] происходит сбой, потому что o был освобожден к моменту вызова метода description.

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

nonatomic против атомного не имеет значения.)

0 голосов
/ 19 ноября 2010

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

Вы не упомянули, что такое сообщение о сбое / ошибке, но я предполагаю, что ваш NSMutableArray будет выпущен до того, как начнется ваша вторая итерация с ним.

Попробуйте сохранить массив так долго, как вам нужно:

self.sessionProcList = [NSMutableArray arrayWithArray:[result records]];
[sessionProcList retain];

А затем отпустите, когда закончите:

[sessionProcList release];

Надеюсь, это поможет. Рог

0 голосов
/ 19 ноября 2010

Если бы мне пришлось угадывать, я бы сказал, что на элементы этого массива ссылаются откуда-то еще. Сброс массива приводит к сбою элементов, использующих ссылки.

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

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