2012-04-11 7 views
2

RestKit(0.10.0)とバックエンドのコアデータを使用してサーバーから次の方法で編集済みオブジェクトをロードしています。同期プロセスの一部としてのメソッドは、アプリケーションがフォアグラウンドに入るたびに呼び出されます。RestKit - キャッシュは2回目の呼び出し時にのみCore Dataに保存されます

[syncObjectManager loadObjectsAtResourcePath:[NSString stringWithFormat:@"?config=accounts&since=%@", lastSync] usingBlock:^(RKObjectLoader *loader) { 
    [loader.mappingProvider setObjectMapping:companyMappingSync forKeyPath:@"data"]; 
    loader.backgroundPolicy = RKRequestBackgroundPolicyContinue; 
    loader.delegate = self; 
}]; 

応答が正常にロードされ、キャッシュも同様に検出されたようです。

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' 

属性 "street"の変更をテストするとき、変更も同様にマップされます。

2012-04-11 15:58:33.013 mobileCRM[3575:1a03] T restkit.object_mapping:RKObjectMappingOperation.m:332 Mapped attribute value from keyPath 'street' to 'street'. Value: Musterweg 55 

私は新しいfetchRequestを呼び出し、所属のテーブルビューを再ロードしています。

通報

どういうわけか変更されたオブジェクトは、最初の呼び出しの後(COMMITメッセージもコアデータと示す)バックエンドに保存されていません。

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 

しかし、もう一度メソッドを呼び出すときにアプリを開くと、更新されたデータが期待どおりに表示されます。だから私は最初の呼び出しでメソッドを動作させるのに苦労しています。

あなたのアイデアをお寄せいただきありがとうございます。

答えて

1

// App Delegate 
RKLogConfigureByName("RestKit/*", RKLogLevelTrace); 

// Scheme 
-com.apple.CoreData.SQLDebug 1 

で出力を確認した後、私はコアデータのデータのコミットが完了する前に、私は、データを再ロードすることを実現しました。

したがって、RKRequestQueueを使用している場合でも、次の方法を使用して問題を解決してください。

- (void)objectLoaderDidFinishLoading:(RKObjectLoader *)objectLoader 
{ 
    // Send notification to tableView 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"refreshTableView" object:self]; 
} 

...と動作します。 :)

+0

質問/回答スキームに従って、解決策を回答として投稿し、それを受け入れる必要があります。これは、他のユーザーがこれが解決された質問であることを見て、答えを見つけるのに役立ちます。 – Kai

+0

次回は覚えています、ありがとう! – flashfabrixx

関連する問題