2012-04-11 2 views
2

다음과 같은 방법으로 RestKit (0.10.0) 및 코어 데이터가 백엔드에있는 서버에서 편집 된 개체를로드합니다. 앱이 포 그라운드로 들어갈 때마다 동기화 프로세스의 일부로 메소드가 호출됩니다.RestKit - 캐시가 두 번째 호출시에만 코어 데이터에 저장됩니다.

[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를 호출하고 속한 테이블보기를 다시로드합니다.

문제

든 변경된 객체의 첫 번째 호출 후에 (커밋 메시지에도 코어 데이터로 나타낸다) 백엔드에 저장되지 않는다.

그러나 앱을 다시 열어 메서드를 다시 호출하면 새로 고침 된 데이터가 예상대로 표시됩니다. 그래서 첫 번째 호출에서 메서드를 작동 시키려면 고심하고 있습니다.

의견을 보내 주셔서 감사합니다.

답변

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