Внесение изменений в основной массив извлеченных данных - PullRequest
0 голосов
/ 04 марта 2012

Вот что у меня есть:

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 отсутствует тот, который я добавил (но у него есть два других, поэтому я знаю, что массив работает правильно).По какой-то причине он не сохраняется.

(NoteObject - это подкласс NSManagedObject, а arrayOfTags - преобразуемое свойство сущности.)

Я что-то не так делаюздесь?

Редактировать: вот как я добавляю новую заметку, которая отлично сохраняется, даже с 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]);
        }

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

Ответы [ 2 ]

0 голосов
/ 06 марта 2012

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

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]);
}
0 голосов
/ 04 марта 2012

Вы имели в виду, что используете атрибут Transformable?Помогает ли это: Основная проблема сохранения данных: невозможно обновить преобразовываемый атрибут (NSArray)

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