Я нашел эту общую функцию сохранения гораздо лучшим решением:
- (BOOL)saveContext {
NSError *error;
if (![self.managedObjectContext save:&error]) {
DDLogError(@"[%@::%@] Whoops, couldn't save managed object context due to errors. Rolling back. Error: %@\n\n", NSStringFromClass([self class]), NSStringFromSelector(_cmd), error);
[self.managedObjectContext rollback];
return NO;
}
return YES;
}
При сбое сохранения происходит откат NSManagedObjectContext, что означает сброс всех изменений, которые были выполнены в контексте с момента последнего сохранения . Поэтому вы должны внимательно следить за тем, чтобы всегда сохранять изменения, используя вышеуказанную функцию сохранения, как можно раньше и регулярно, поскольку в противном случае вы легко потеряете данные.
Для вставки данных это может быть более свободный вариант, позволяющий другим изменениям жить:
- (BOOL)saveContext {
NSError *error;
if (![self.managedObjectContext save:&error]) {
DDLogError(@"[%@::%@] Whoops, couldn't save. Removing erroneous object from context. Error: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), object.objectId, error);
[self.managedObjectContext deleteObject:object];
return NO;
}
return YES;
}
Примечание: я использую CocoaLumberjack для входа в систему здесь.
Любые комментарии о том, как улучшить это, приветствуются!
BR
Chris