2017-05-14 11 views
0

iOS 어플리케이션에서 RestKit을 사용하고 있습니다. CoreData에 데이터를 저장하지 않았기 때문에 지금까지 객체 매핑을 사용하고있었습니다. 이제 사용자가 일부 데이터를 다운로드 할 수있는 가능성을 추가하고 사용자가 인터넷에 연결되어 있지 않으면 해당 데이터를 사용하려고합니다.RestKit - 엔티티 매핑과 오브젝트 매핑을 혼합하십시오.

엔티티 매핑을 사용해야한다는 것을 알고 있지만 문제가 있습니다. 동일한 요청에 두 가지 다른 매핑을 어떻게 사용할 수 있습니까? 내 말은, 나는이 두 가지 사건을 어떻게 처리해야하는지 이해하지 못한다. 사용자가 데이터를 다운로드하기로 결정 했든 아니면 한 번 표시하도록 요청 했든간에 URL 경로는 완전히 동일합니다. 어떻게 RestKit을 CoreData에 저장하고 다른 시간에 ObjectMapping으로 매핑 할 것인지 알려주려면 어떻게해야합니까?

기본적으로이 질문과 동일한 질문을하고 있는데, 구체적으로는 How to use Core Data models without saving them? 이지만 MagicalRecords 대신 RestKit을 사용하는 것이 좋습니다.

답변

0

이 경우를 처리하는 올바른 방법은 다른 ManagedObjectContext를 사용하는 것입니다. 당신은 영구 데이터가 하나 필요합니다, 그것은 다음과 같이 설정할 수 있습니다 : 일시적인 것, 두 번째 상황을 만들 수

// Initialize managed object store 
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel]; 
objectManager.managedObjectStore = managedObjectStore; 
[managedObjectStore createPersistentStoreCoordinator]; 
[[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy]; 

을 다음 :

NSManagedObjectContext *newTemporaryContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; // Choose your concurrency type, or leave it off entirely 
[newTemporaryContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy]; 
newTemporaryContext.persistentStoreCoordinator = coordinator; 

마지막으로, 이 작업이 완료되면 어딘가에 임시 컨텍스트에 대한 참조를 저장하고 앱의 컨텍스트에 따라 사용할 컨텍스트를 결정해야합니다.

0

방금 ​​비슷한 문제가 있습니다. 코어 데이터에 매핑 할 사용자 개체 외에도 반환되는 토큰을 얻으려고했습니다. 토큰은 JSON 응답에서 자체적으로 보내 지므로 추출 방법을 알 수 없습니다. 결국

나는 다음과 같은 사용 :

[operation setWillMapDeserializedResponseBlock:^id(id deserializedResponseBody) { 
    NSDictionary *dictionary  = [[NSMutableDictionary alloc] init]; 
    dictionary = deserializedResponseBody; 
    self.token = [dictionary objectForKey:@"token"]; 
    return deserializedResponseBody; 
}]; 

json으로는 형식으로되어 있습니다 :

{ 
    “token”: “....”, 
    “user”: { 
     .... 
    } 
} 

작업 setWillMapDeserializedResponseBlock 방법은 당신에게 매핑이 발생하기 전에 결과를 조작 할 수있는 기회를 제공합니다 - 또는 오브젝트 맵핑에서 다루지 않는 다른 데이터를 가져올 수 있습니다. 멋지게 작동합니다.