Ich lade bearbeitete Objekte vom Server mit RestKit (0.10.0) und Core Data im Backend mit der folgenden Methode. Die Methode als Teil eines Synchronisierungsprozesses wird aufgerufen, sobald die App in den Vordergrund tritt.RestKit - Zwischenspeichern in Core-Daten nur beim zweiten Aufruf
[syncObjectManager loadObjectsAtResourcePath:[NSString stringWithFormat:@"?config=accounts&since=%@", lastSync] usingBlock:^(RKObjectLoader *loader) {
[loader.mappingProvider setObjectMapping:companyMappingSync forKeyPath:@"data"];
loader.backgroundPolicy = RKRequestBackgroundPolicyContinue;
loader.delegate = self;
}];
Die Antwort wird normal geladen und der Cache schien ebenfalls gefunden zu werden.
2012-04-11 15:58:32.147 mobileCRM[3575:707] T restkit.support:RKCache.m:82 Found cachePath '/var/mobile/Applications/C5E4BF4F-4CB0-4F4C-AC11-FC1E17AE4AF2/Library/Caches/RKClientRequestCache-www.URLTOSERVER.de/PermanentStore/37abc4aff62918578288d10530e6bcd6' for PermanentStore/37abc4aff62918578288d10530e6bcd6
2012-04-11 15:58:32.152 mobileCRM[3575:707] T restkit.support:RKCache.m:119 Wrote cached data to path '/var/mobile/Applications/C5E4BF4F-4CB0-4F4C-AC11-FC1E17AE4AF2/Library/Caches/RKClientRequestCache-www.URLTOSERVER.de/PermanentStore/37abc4aff62918578288d10530e6bcd6'
2012-04-11 15:58:32.158 mobileCRM[3575:707] T restkit.support:RKCache.m:100 Writing dictionary to cache key: 'PermanentStore/37abc4aff62918578288d10530e6bcd6.headers'
2012-04-11 15:58:32.159 mobileCRM[3575:707] T restkit.support:RKCache.m:82 Found cachePath '/var/mobile/Applications/C5E4BF4F-4CB0-4F4C-AC11-FC1E17AE4AF2/Library/Caches/RKClientRequestCache-www.URLTOSERVER.de/PermanentStore/37abc4aff62918578288d10530e6bcd6.headers' for PermanentStore/37abc4aff62918578288d10530e6bcd6.headers
2012-04-11 15:58:32.166 mobileCRM[3575:707] T restkit.support:RKCache.m:103 Wrote cached dictionary to cacheKey 'PermanentStore/37abc4aff62918578288d10530e6bcd6.headers'
Beim Testen einer Änderung im Attribut "Straße" werden die Änderungen ebenfalls gut abgebildet.
Nach Abschluss der Operation rufe ich eine neue fetchRequest und neu die zugehörige Tabelle anzeigen.
Problem
Irgendwie hat das geänderte Objekt wird im Backend nicht gespeichert (auch mit Core Data zeigt die Meldung COMMIT) nach dem ersten Aufruf.
2012-04-11 16:05:44.235 mobileCRM[3603:351f] I restkit.core_data:RKInMemoryEntityCache.m:131 Caching all 2861 Company objectsIDs to thread local storage
2012-04-11 16:05:44.354 mobileCRM[3603:351f] CoreData: sql: BEGIN EXCLUSIVE
2012-04-11 16:05:44.357 mobileCRM[3603:351f] CoreData: sql: UPDATE ZCOMPANY SET ZSTREET = ?, Z_OPT = ? WHERE Z_PK = ? AND Z_OPT = ?
2012-04-11 16:05:44.361 mobileCRM[3603:351f] CoreData: sql: COMMIT
Aber wenn ich die App ein zweites Mal öffnen wieder die Methode aufzurufen, wird die aktualisierten Daten wie erwartet gezeigt. Ich kämpfe darum, dass die Methode beim ersten Aufruf funktioniert.
Vielen Dank für Ihre Ideen!
In Übereinstimmung mit dem Frage/Antwort-Schema sollten Sie Ihre Lösung als Antwort veröffentlichen und akzeptieren. Dies hilft anderen Benutzern zu sehen, dass dies eine gelöste Frage ist und um die Antwort zu finden. – Kai
Wird es für das nächste Mal erinnern, danke! – flashfabrixx