Базовый объект данных становится недействительным - PullRequest
1 голос
/ 10 декабря 2010

У меня проблема с некоторыми объектами Core Data, которые как-то признаны недействительными. Контекст управляемого объекта находится в делегате приложения, и я использую его в таблице представлений для извлечения объектов «заметок» из базы данных и их отображения. Я строю массив для разделов (сегодня, вчера и т. Д.), А для каждого раздела - массив с примечаниями в этом разделе:

// in the .h file
NSMutableArray* data; // An array containing an array of thoughts for each section.
@property (nonatomic, retain, readonly) NSManagedObjectContext* objectContext;

// in the .m file, when loading the view
ThoughtsAppDelegate* appDelegate = (ThoughtsAppDelegate*)[[UIApplication sharedApplication] delegate];
objectContext = appDelegate.managedObjectContext;

NSEntityDescription* descriptor = [[NSEntityDescription entityForName:@"Note"                       
                                   inManagedObjectContext:objectContext] autorelease];
NSFetchRequest* request = [[NSFetchRequest alloc] init];
[request setEntity:descriptor];
NSError* error;
NSArray* notes = [objectContext executeFetchRequest:request error:&error];
// example for one section
data = [[NSMutableArray alloc] init];
NSMutableArray* ccurrentSection = [[NSMutableArray alloc] init];
[data addObject:currentSection];
for(Note* t in notes) 
    [currentSection addObject:t];

Когда загружается представление, отображаются первые 5 заметок (остальные не помещаются в представлении), и все в порядке. Но когда я прокручиваю вниз, чтобы просмотреть следующие заметки, я получаю

NSObjectInaccessibleException NSManagedObject с идентификатором ... признан недействительным.

Это происходит для всех объектов в массиве.

Как это возможно? Я проверил и не сбрасывать / освобождать контекст. Или плохо хранить объект Core Data и обращаться к нему позже?

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

1 Ответ

1 голос
/ 10 декабря 2010

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

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