Używam UIManagedDocument do zarządzania moimi danymi. Tworzę model i używam go, i wszystko wydaje się działać, ale moje zmiany nie są zapisywane z powrotem do sklepu SQLite.UIManagedDocument nie zapisuje
Dokumentacja dla UIManagedDocument mówi, że autozapis powinien dbać o utrzymanie danych w bazie danych, ale to się nie dzieje.
NSManagedObjectContext *moc = [doc managedObjectContext];
NSError *error = nil;
MyItem *itemToAdd = (MyItems *)[moc existingObjectWithID:(NSManagedObjectID *)itemsID error:&error];
Spowoduje to pobranie obiektu, który chcę dodać (i powiedzie się).
[itemContainer addItemsObject:itemToAdd];
[doc updateChangeCount:UIDocumentChangeDone];
Dodaje element do kolekcji przedmiotów w innym obiekcie, a następnie informuje dokument, że dokonałem zmian.
Spodziewam się, że niedługo potem zobaczę zmianę zapisaną w magazynie danych podstawowych, ale oglądając w Instrumentach, widzę, że to się nigdy nie zdarza.
Kolekcja przedmiotów jest NSOrderedSet, a ze względu na komentarze do tego elementu:
Exception thrown in NSOrderedSet generated accessors
dodałem takie addItemsObject: do obiektu, który przechowuje kolekcję:
- (void)addItemsObject:(MyItem *)value
{
NSMutableOrderedSet* tempSet = [NSMutableOrderedSet orderedSetWithOrderedSet:self.items];
[tempSet addObject:value];
self.items = tempSet;
}
Być może coś idzie nie tak z tym, że Core Data otrzymuje informację, że kolekcja przedmiotów się zmieniła, ale nie wiem, jak to zrobić.
Dzięki Instruments widzę, że dane są zapisywane w pamięci podręcznej danych podstawowych. Ale nie pojawia się w narzędziu Core Data Saves, a jeśli zabiję i zrestartuję aplikację, moje zmiany znikną. – stevex
Znalazłem mój problem. Okazuje się, że wystąpił błąd związany z obiektem, który próbowałem dodać - straciłem wymaganą właściwość - i bez nadpisania handleError nic nie wskazuje na to, że wystąpił problem. Blogował o tym tutaj: http://blog.stevex.net/2011/12/uimanageddocument-autosave-troubleshooting/ – stevex