2017-05-14 6 views
0

iOSアプリケーションでRestKitを使用しています。これまで、CoreDataにデータを永続化していなかったため、オブジェクトマッピングを使用していました。私は今、ユーザーがいくつかのデータをダウンロードする可能性を追加し、ユーザーがインターネットに接続していない場合にそのデータを使用したいと考えています。RestKit - エンティティマッピングとオブジェクトマッピングの混合

エンティティマッピングを使用する必要があることを理解していますが、私は問題に遭遇しています。同じ要求に対して2つの異なるマッピングを使用するにはどうすればいいですか?つまり、私はこれら2つのケースをどのように処理するのか分かりません。ユーザーがデータをダウンロードするかどうかを問わず、URLのパスはまったく同じになります。 RestKitをCoreDataに保存する方法と、ObjectMappingを使用してマップする方法について教えてください。

基本的に、私はこれと同じ質問をしています:How to use Core Data models without saving them? しかし、特にMagicalRecordsではなくRestKitです。

答えて

0

このケースを処理する正しい方法は、異なるManagedObjectContextを使用することです。 、

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

最後に: あなたは永続的なデータのための1つが必要になりますし、このように設定することができます。

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

次に、2番目のコンテキストを作成することができ、それは一時的になりますこれが完了したら、一時的なコンテキストへの参照をどこかに保存し、アプリのコンテキストに基づいて、使用するコンテキストを決定する必要があります。

0

私はちょうど同様の問題を抱えていました。コアデータにマッピングしているユーザーオブジェクトに加えて、返されていたトークンを取得する必要がありました。トークンはJSONレスポンスで独自に送信されるので、どのように抽出するのかはわかりませんでした。私は次のように使用最後に

:JSONフォーマットである

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

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

操作setWillMapDeserializedResponseBlock方法はあなたにマッピングが行われる前に結果を操作するための機会を与えてくれます - またはオブジェクトマッピングによってカバーされていない他のデータを取得することができます。うまく動作します。

関連する問題