2012-03-04 4 views
0

Вот что у меня есть:внесение изменений в ядро ​​данных извлеченного массив

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription 
           entityForName:@"NoteObject" inManagedObjectContext:appDelegate.managedObjectContext]; 

[fetchRequest setEntity:entity]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(parentNoteId == %@) AND (noteId!=rootNoteId)", appDelegate.currentNoteId]; 
[fetchRequest setPredicate:predicate]; 
NSError *error; 

[appDelegate.arrayOfNotes setArray:[appDelegate.managedObjectContext executeFetchRequest:fetchRequest error:&error]]; 

NoteObject *note=[appDelegate.arrayOfNotes objectAtIndex:0]; 
[note.arrayOfTags addObject:someObject]; 

NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
if (![context save:&error]) { 
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
} 

выборки отлично работает, и добавление объекта к arrayOfTags работам и отражают в пользовательском интерфейсе. Однако, когда я выхожу из приложения и возвращаюсь, в arrayOfTags отсутствует тот, который я добавил (но он имеет два других, поэтому я знаю, что массив работает правильно). По какой-то причине это не спасает.

(The NoteObject является подклассом NSManagedObject и arrayOfTags является трансформируемой собственностью субъекта.)

Могу ли я сделать что-то здесь не так?

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

NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
NSEntityDescription *noteEntity = [[appDelegate.managedObjectModel entitiesByName] objectForKey:@"NoteObject"]; 
NoteObject *tempNote = [[NoteObject alloc] initWithEntity:noteEntity insertIntoManagedObjectContext:context]; 
[tempNote.arrayOfTags addObject:@"tag1"]; 
NSError *error; 
     if (![context save:&error]) { 
      NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
     } 

Это только тогда, когда я делаю что он не сохраняется должным образом.

+0

Что такое 'someObject'? – jrturton

+0

Просто строка. Я еще не уверен, но я думаю, что моя проблема может заключаться в том, что я не использую fetchedResultsController. – Snowman

+0

. Вероятнее всего, это проблема в вашей реализации arrayOfTags. Можете ли вы включить более подробную информацию об этом? – jrturton

ответ

0

Оказывается, все, что я должен был сделать заново установить массив после внесения в него изменений:

NoteObject *tempNote = [[NoteObject alloc] initWithEntity:noteEntity insertIntoManagedObjectContext:context]; 
[tempNote.arrayOfTags addObject:@"tag1"]; 

[tempNote setArrayOfTags:tempNote.arrayOfTags]; //this is the magic line 

NSError *error; 
if (![context save:&error]) { 
     NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
} 
Смежные вопросы