NSManagedObjectContext executeFetchRequest возвращает массив, содержащий объекты, которые не задерживаются - PullRequest
0 голосов
/ 25 июля 2011

У меня есть 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).

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

РЕДАКТИРОВАТЬ Обратите внимание, что, учитывая ответ, название вопроса может быть немного вводящим в заблуждение.

1 Ответ

0 голосов
/ 25 июля 2011

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

После изменения @property (nonatomic, assign) на @property (nonatomic, retain) itне падаетУра.Ооочень с нетерпением жду ARC.

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