这就是我所拥有的:
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]);
}
fetch工作正常,向arrayOfTags
添加对象可以正常工作并在UI中反映出来。但是,当我退出应用程序并返回时,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]);
}
只有当我进行更改时才能正确保存..
答案 0 :(得分:0)
您的意思是说您正在使用Transformable属性吗? 这有用吗: Core Data saving problem: can't update transformable attribute (NSArray)
答案 1 :(得分: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]);
}