Ich war auch für 4 oder 5 Stunden verwirrt :) So. Ihre geerbte Klasse von NSPersistentStore ist "Darstellung" Ihres Remote-Datenspeichers.
Also, für den entfernten Zugriff auf Daten und Speichern/Caching lokal benötigen Sie bitte den folgenden
1) tun erstellen Unterklasse von NSPersistentStore und es einzurichten.
wie folgt aus:
YOURIncrementalStore *incrementalStore = [coordinator addPersistentStoreWithType:[YOURIncrementalStore type] configuration:nil URL:nil options:nil error:&error];
wo Koordinator Haupt NSPersistentStoreCoordinator
2) Dann Sie andere NSPersistentStoreCoordinator müssen, dass "koordinieren lokale Vertretung (incrementalStore) und den Kontext des externen Speichers" wird und geben Sie Ihre lokale Speicherrepräsentation (wie SQLite DB URL) an:
[incrementalStore.backingPersistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]
Aber vergessen Sie nicht, dass Ihr neues persistentes Geschäft alle Ihre vorherigen lokalen Zustand kennen muss. So werden Optionen dict sein:
NSDictionary *options = @{ NSInferMappingModelAutomaticallyOption : @YES, NSMigratePersistentStoresAutomaticallyOption:@YES }
Also, imho, ich verstehe alle internen Arbeit auf diese Weise:
Sie fordern einige Daten aus externen API. Analysiere es, speichere es im Kontext deines backingPersistentStoreCoordinators und füge es dann zum Hauptteil hinzu.Die Zustände aller Kontexte sind also gleich.
Der gesamte vorherige Text basiert auf der Arbeit mit der Problemumgehung AFIncrementalStore.
Mein Code AFIncrementalStore mit MagicalRecord implementieren:
- (void)addMRAndAFIS {
[MagicalRecord setupCoreDataStack];
NSURL *storeURL = [NSPersistentStore urlForStoreName:[MagicalRecord defaultStoreName]];
NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator defaultStoreCoordinator];
NSError *error = nil;
NSArray *arr = coordinator.persistentStores;
AFIncrementalStore *incrementalStore = (AFIncrementalStore*)[coordinator addPersistentStoreWithType:[PTIncrementalStore type] configuration:nil URL:nil options:nil error:&error];
NSDictionary *options = @{ NSInferMappingModelAutomaticallyOption : @YES,
NSMigratePersistentStoresAutomaticallyOption:@YES };
arr = coordinator.persistentStores;
if (![incrementalStore.backingPersistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
Wenn wir die einfachste Art und Weise diskutieren müssen, müssen Sie nur NSIncrementalStore Unterklasse, Setup es richtig (wie ich schrieb), Daten analysieren, erstellen Sie dann einige Kontext, speichern Sie das Datum, speichern Sie es und fügen Sie es in den übergeordneten Kontext ein.
Sie haben also 2 Stores und 2 Kontexte und 1 StoreCoordinator.
Wenn ich irgendwo einen Fehler gemacht habe, bitte beachten Sie es.
Versuchen Sie auch,: https://gist.github.com/stevederico/5316737
ich bereits angefangen habe meine eigene Unterklasse zu implementieren. Ich werde es bald als Open Source veröffentlichen, bleiben Sie dran. : D – wczekalski
Also was? Hast du was du willst? –
Ich mache es immer noch, aber ich werde bald fertig sein. Es wird auf meinem GitHub sein - github.com/wczekalski – wczekalski