Estoy usando UIManagedDocument para administrar mis datos. Creo el modelo y lo uso, y todo parece estar funcionando, pero mis cambios no se escriben nuevamente en la tienda de SQLite.UIManagedDocument no guarda
La documentación de UIManagedDocument dice que el autoguardado debe encargarse de conservar los datos en la base de datos, pero eso no parece estar sucediendo.
NSManagedObjectContext *moc = [doc managedObjectContext];
NSError *error = nil;
MyItem *itemToAdd = (MyItems *)[moc existingObjectWithID:(NSManagedObjectID *)itemsID error:&error];
Esto recupera el objeto que quiero agregar (y tiene éxito).
[itemContainer addItemsObject:itemToAdd];
[doc updateChangeCount:UIDocumentChangeDone];
Esto agrega el elemento a una colección de artículos en otro objeto, y luego le dice al documento que he terminado de hacer cambios.
Esperaré un poco de tiempo después de esto para ver el cambio escrito en la tienda Core Data, pero mirando en Instruments, veo que nunca sucede.
La colección de artículos es una NSOrderedSet, y debido a los comentarios sobre este artículo:
Exception thrown in NSOrderedSet generated accessors
He añadido un addItemsObject: el objeto que contiene la colección:
- (void)addItemsObject:(MyItem *)value
{
NSMutableOrderedSet* tempSet = [NSMutableOrderedSet orderedSetWithOrderedSet:self.items];
[tempSet addObject:value];
self.items = tempSet;
}
Tal vez algo anda mal con Core Data informando que la colección de elementos ha cambiado, pero no veo cómo.
Con Instruments, puedo ver que los datos se escriben en el Core Data Cache. Pero no aparece en el instrumento Core Data Saves, y si lo mato y reinicio la aplicación, mis cambios desaparecerán. – stevex
Encontré mi problema. Resulta que tuve un error con el objeto que estaba tratando de agregar (perdí una propiedad requerida) y sin anular handleError no hay indicación de que haya un problema. Blogueó sobre esto aquí: http://blog.stevex.net/2011/12/uimanageddocument-autosave-troubleshooting/ – stevex