iOS 5.0 展開ターゲットで Core Data を含む RestKit 0.10.1 を使用して、カスタム RESTFul API と連携するアプリを構築しています。オフライン接続は重要であるため、デバイスのローカル CoreData データベースにユーザー データのキャッシュを保持しています。
現在、RestKit は非常に優れており、RKFetchResultsTableController をセットアップしてデータを簡単に表示および保持するのはかなり簡単です。ただし、RestKit には、理想的とは思えず、変更方法がわからない動作が 1 つあります。
「レコーディング」というモデルがあります。新しいレコーディングを作成するには、次のことを行っています。
Recording *r = [NSEntityDescription insertNewObjectForEntityForName:@"Recording" inManagedObjectContext:[[RKObjectManager sharedManager].objectStore managedObjectContextForCurrentThread]];
r.name = newName;
[[RKObjectManager sharedManager] sendObject:r toResourcePath:@"/recordings" usingBlock:^(RKObjectLoader *loader){
loader.delegate = self;
loader.method = RKRequestMethodPOST;
loader.serializationMIMEType = RKMIMETypeJSON;
loader.serializationMapping = [RKObjectMapping serializationMappingUsingBlock:^(RKObjectMapping *serializationMapping){
[serializationMapping mapAttributes:@"name", nil];
}];
RBMappingProvider *mappings = (RBMappingProvider *)[[RKObjectManager sharedManager] mappingProvider];
loader.objectMapping = [mappings recordingObjectMapping];
}];
これにより、「録音」タイプの新しいエンティティが作成され、そのエンティティが POST 要求でサーバーに送信されます。成功した場合、これはうまく機能します。
ただし、問題は、サーバーがこれらの作成を正当に拒否する場合があることです。これらの状況で私が見つけたのは、Core Data データベースに ID が 0 のエンティティのローカル コピーが既に存在することです (ID はサーバーによって設定される主キーです)。
ローカル エンティティを削除する唯一の方法は、サーバーからローカル データを強制的に更新することです。
サーバーが 2xx で応答した場合にのみ、オブジェクトをローカルに永続化する方法はありますか? または、サーバーが 2xx 以外で応答した場合に変更を元に戻す方法はありますか?
ありがとう、