2012-05-08 3 views
3

데이터를 생성하지 않는 ios 5 앱이 있습니다. REST 웹 서비스에 대한 GET 호출을 만들고 해당 레코드로 sqlite 데이터베이스를 채 웁니다. 초기 GET은 로컬 데이터베이스에 레코드가 없을 때 유용합니다. 그러나 이후에 전화를 걸면 마지막 GET 이후 데이터가 변경된 레코드의 하위 집합 만 반환합니다. 그러나 일어나는 일은 기존 레코드를 업데이트하지 않고 레코드를 다시 추가하는 것입니다.RestKit/CoreData가 업데이트되지 않음 - 중복 생성

ID 필드가 기본 키 (또는 있어야 함)이며 ID가 이미있는 레코드가 들어 오면 해당 데이터를 업데이트해야합니다. 해당 ID가 없으면 삽입해야합니다.

Xcode에서 데이터 모델의 ID 필드를 '기본 키'로 설정하는 방법을 찾지 못했습니다.

userMapping.primaryKeyAttribute = @"id"; 

을하지만 혼자 정말 아무것도 할 것 같지 않은 : 내 didFinishLaunchingWIthOptions 방법으로이 일을 시도.

// Load the object model via RestKit 
[objectManager loadObjectsAtResourcePath:[@"/synchContacts" appendQueryParams:params] delegate:self]; 

자동적으로 모든 것을 할 것 같다 :

실제로 GET을 수행 할 수있는 내 전화입니다. 나는이 시점에서 ID가 존재하는지 확인하기 위해 논리를 두어야하는지, 그리고 그렇다면 업데이트와 삽입을 비교해야하는지에 대해 분실했다.

답변

0

올바르게 수행 한 것처럼 보이며 didLoadObjects 콜백이 발생하면 핵심 데이터에서 필요한 개체를 쿼리 할 수 ​​있어야합니다.

가져 오기 요청이 설정되는 방식에 문제가있을 수 있습니다. 최신 RestKit하면 RKObjectMappingProvider의

- (void)setObjectMapping:(RKObjectMappingDefinition *)objectMapping forResourcePathPattern:(NSString *)resourcePathPattern withFetchRequestBlock:(RKObjectMappingProviderFetchRequestBlock)fetchRequestBlock; 

기능을 사용할 수 있으며, fetchRequestBlock 적절한 데이터를 가져왔다.

RestKit은 부분 업데이트 요청을 실제로 처리하지 않습니다. 매우 활동적인 RestKit Google 그룹에서 더 많은 행운을 누릴 수 있습니다.

0

인용구 : XCode의 데이터 모델에서 ID 필드를 '기본 키'로 설정하는 방법을 찾지 못했습니다. 나는 didFinishLaunchingWIthOptions 메서드에서 이것을 시도했다 : userMapping.primaryKeyAttribute = @ "id";

'primaryKeyAttribute'는 CoreData가 아닌 독자적으로 관리하는 CoreData ID가 아니라 API 페이로드의 API입니다. RestKIt은 (보이지 않는) CoreData 기본 키를 지정된 JSON 키에 매핑합니다. 최신 RESTKit 버전 (0.23)이 같은 기본 키를 정의 할 수 있습니다의로

1

:

[_mapping addAttributeMappingsFromDictionary:@{ @"id" : @"objectId", @"name" : @"name" }]; 
[_mapping setIdentificationAttributes:@[ @"objectId" ]]; 

OBJECTID는 핵심 데이터 개체에 대한 기본 키는 당신에게 반면.

관련 문제