2012-05-08 13 views
3

私は、データを作成しないios 5アプリケーションを持っています。これは単にREST WebサービスへのGET呼び出しを行い、sqliteデータベースにそれらのレコードを設定します。初期のGETは、ローカルデータベースにレコードが存在しない場合に有効です。しかし、その後の呼び出しでは、最後のGET以降にデータが変更されたレコードのサブセットのみを返します。しかし、起こっているのは、レコードがただちに追加されるだけで、既存のレコードは更新されないということです。RestKit/CoreDataが更新されない - 重複を作成する

私は主キー(またはそうでなければならない)であるIDフィールドを持っています。そのIDが既に存在するレコードが来ると、そのデータを更新します。そのIDが存在しない場合は、挿入されている必要があります。

私のIDフィールドをXCodeのデータモデルの「主キー」として設定する方法がありませんでした。

userMapping.primaryKeyAttribute = @"id"; 

をしかし、それだけでは本当に何もしていないようでした。私は私のdidFinishLaunchingWIthOptionsの方法でこれをやってみました。

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

自動的にすべてを行うようだ:

この

は、実際にGETを実行するために、私の呼び出しです。私はこの時点で、IDが存在するかどうかを確認するロジックを置くべき場所と、そうであれば更新を挿入するかどうかについて何かを失う。

答えて

0

正しく実行されているように見えますが、didLoadObjectsコールバックが発生したときに、必要なオブジェクトのCore Dataにクエリを実行できるはずです。

フェッチリクエストの設定方法に問題がある可能性があります。最新RestKitを使用すると、RKObjectMappingProviderの

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

機能を使用することができますし、fetchRequestBlockは、適切なデータをフェッチしています。

RestKitは部分的な更新要求を非常にうまく処理しません。あなたは非常にアクティブなRestKit Googleグループでもっと運があるかもしれません。

0

引用: 私のIDフィールドをXCodeのデータモデルの「主キー」として設定する方法がありませんでした。私はdidFinishLaunchingWIthOptionsメソッドでこれをやろうとしました: userMapping.primaryKeyAttribute = @ "id";

「primaryKeyAttribute」は、CoreDataが独自に管理するCoreData IDではなく、apiペイロードのものです。 RestKitは、(見えない)CoreData主キーを指定されたJSONキーにマッピングします。最新RESTKitバージョン(0.23)あなたはこのように主キーを定義することができますのよう

1

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

OBJECTIDは、コア・データ・オブジェクトのプライマリキーはあなたにあるのに対し。

関連する問題