У меня есть UITableView, который я заполняю данными из CoreData. У меня есть класс доступа к данным, я вызываю метод, чтобы получить массив данных для заполнения таблицы. В этом методе у меня есть что-то вроде этого:
NSArray *fetchedArray = [context executeFetchRequest:request error:&error];
Я просто возвращал этот массив напрямую, но получал ошибку в моем контроллере представления, когда я пытался установить его локальное свойство, которое содержит возвращенный массив
@property (nonatomic, retain) NSArray *listData;
и
@synthesize listData; // <-- error here -[CFNumber release]: message sent to deallocated instance...
соответственно.
Казалось, что 'retain' в моем @property пытался освободить предыдущий массив listData
, который, похоже, уже был освобожден (или, скорее, объект в массиве или одно из его свойств были освобождены ).
Итак, в моем классе доступа к данным я добавил следующее после того, как fetchedArray
произведен контекстом:
NSMutableArray *listArray = [[[NSMutableArray alloc] init] autorelease];
for (Response *item in fetchedArray) {
[listArray addObject:item];
}
return listArray;
Но я все еще получаю ту же ошибку в @synthesize listData
в контроллере вида. Обычно это происходит не в первый раз, но после подключения к подробному контроллеру, а затем возврата к списку и перезагрузки списка с другими данными (например, фильтрация на основе пользовательского ввода, вызывающая метод доступа к данным для возврата обновленного list - отсюда ошибка в установщике для listData
).
Я не совсем уверен, связана ли моя проблема с управлением памятью или с чем-то, чего я не понимаю относительно того, что возвращает контекст. Было бы хорошо, если бы запрос на выборку вернул данные, которые не были выпущены, когда я думаю, что сохранил их. (
РЕДАКТИРОВАТЬ Обратите внимание, что, учитывая ответ, название вопроса может быть немного вводящим в заблуждение.