2017-03-02 18 views
0

저는 RestKit 0.27.0으로 작업 중이며 RestKits GitHub의 TwitterCoreData 예제와 거의 똑같이 내 코어 데이터 스택을 설정했습니다.RestKit putObject - 코어 데이터 저장소로 지속성을 다시 처리해야합니까?

또한 내 PUT 요청에 문제가 있어도 핵심 데이터의 개체를 올바르게 유지하는 GET/POST 요청을 매핑했습니다 ().

내 PUT 요청이 서버의 개체를 올바르게 업데이트하고있는 것으로 보입니다. 응답에서 업데이트 된 것을 볼 수 있습니다. 그런 다음 SQLite DB 뷰어를 갱신하여 Entity가 업데이트 될 것으로 예상했지만 새로 만들지 않았습니다.

예를 들어 addressLine1을 취하면 "4 일부 주소"로 설정됩니다. 그런 다음 NSManagedObject에서 "4 TEST THIS CHANGE"로 업데이트하고 PUT의 Object로 전달합니다.

나는 로그에 다음 볼 수 있습니다

2017년 3월 2일 15 : 05 : 18.006 알버트 [41779 : 1232025] T restkit.object_mapping : RKMappingOperation.m : 748 건너 뛴 매핑 을의를 의해 AddressLine1 ' '키 패스에 의해 AddressLine1 '키 패스에서 속성 값 - 값은 (4 TEST이 변경) 나는 NSManagedObject에 의해 AddressLine1 값을 업데이트했기 때문에 경우

그것은, 그 RestKit하지 않는 거의 것으로 변경되지 않습니다 변화로 받아 들여?

내 응용 프로그램에 다시 로그온하면 GET 요청을 수행하고 Object를 가져 오면 CoreData에 저장된 일시적인 Object와 Entity 사이에 차이가 있다는 것을 알게되고 성공적으로 업데이트됩니다.

내가 잘못 가고있는 부분을 이해할 수있는 putObject : 설명서가 없으므로 최신 버전의 RestKit (작성 시점 기준 0.27.0)을 기반으로합니다. 제공된 또는 예를 들어, 기존 NSManagedObject를 참조하는 것으로 시작하여 속성 (속성)을 업데이트 한 다음 PUT 요청에서 인수로 전송합니다. RestKit이 GET 및 POST 요청 에서처럼 Core Data에 대한 지속성을 처리해야한다고 상상합니다.

답변

0

RestKit이 CoreData와 어떻게 작동하는지 오해 한 것 같습니다.

원래 내가 먼저 개체에 필요한 업데이 트를 제작 한 후이 같은 PUT 요청을하고 :

[[RKObjectManager sharedManager] putObject:myObjectWithChanges 
           path:path 
           parameters:nil 
    success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 

나는 변경 사항으로 NSManagedObject를 전달하여, 그것이 제대로 작동한다고 가정한다. 그것은 서버를 업데이 트했지만 CoreData에서 엔티티를 업데이트 할 때 스크래치가 발생합니다. RestKit은 로컬 NSManagedObject를 업데이트했기 때문에 RestKit이 이미 업데이트 된 것으로 간주합니다.

NSDictionary *dict = @{ 
         @"addressLine1":@"4 TEST THIS CHANGE 11", 
         @"addressLine2":@"Address line 2", 
         @"postCode":@"WN7 5GB" 
         }; 

[[RKObjectManager sharedManager] putObject:nil   
           path:path 
           parameters:dict 
    success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 
:

그래서 대신 내가 시도하고 개체에 대한 무기 호를 사용하고 (경로를 제공하는 경우가 RestKit의 Object를 제공하기 위해 필요한 것은 아닙니다) 매개 변수의 사전으로 변경 사항을 전달하기로 결정

PUT에 이것을 사용하면 서버의 개체와 핵심 데이터의 로컬 엔터티를 모두 업데이트 할 수있었습니다.

putObject:의 "개체"는 RestKit에게 어떤 개체인지 알려주는 것으로 가정 할 수 있으므로 RestKit은 라우팅을위한 적절한 요청/응답 설명자를 선택할 수 있습니다. 해당 개체에 대해 변경해야하는 것은 parameters: 인수입니다.

참고 : 그것은과 같이 전화로 개체를 넣어도 괜찮 :

NSDictionary *dictWithChanges = @{ 
             @"addressLine1":@"Change here" 
            }; 

    [[RKObjectManager sharedManager] putObject:myObjectWithoutChanges   
            path:path 
            parameters:dictWithChanges 
     success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 

RestKit이 개체와 매개 변수에 대한 변경 내용을 병합하고 요청을 재구성 것으로 보인다.