3

データを作成しないios 5アプリがあります.REST WebサービスへのGET呼び出しを行い、sqliteデータベースにそれらのレコードを入力するだけです。最初の GET は、ローカル データベースにレコードがない場合にうまく機能します。ただし、後続の呼び出しを行うと、最後の GET 以降にデータが変更されたレコードのサブセットのみが返されます。しかし、何が起こっているかというと、既存のレコードを更新するのではなく、レコードが再び追加されるだけです。

主キーである (またはあるべき) ID フィールドがあり、ID が既に存在するレコードが入ってきたら、そのデータを更新したいと考えています。その ID が存在しない場合は、挿入する必要があります。

XCode のデータモデルで ID フィールドを「主キー」として設定する方法がわかりませんでした。私は didFinishLaunchingWIthOptions メソッドでこれをやってみました:

userMapping.primaryKeyAttribute = @"id";

しかし、それだけでは実際には何の役にも立たなかったようです。

これは、実際に GET を実行するための呼び出しです。

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

これはすべてを自動的に行うようです。この時点で、ID が存在するかどうかを確認するためのロジックをどこに置くべきか、存在する場合は更新と挿入、または何を行うべきかについて迷っています。

4

3 に答える 3

1

最新の RESTKit バージョン (0.23) では、主キーを次のように定義できます。

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

objectId は、コア データ オブジェクトの主キーです。

于 2014-07-28T21:49:37.380 に答える
0

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

「primaryKeyAttribute」は、CoreData が独自に管理する CoreData ID ではなく、API ペイロードからのものであることに注意してください。次に、RestKIt は (見えない) CoreData プライマリ キーを指定された JSON キーにマップします。

于 2012-10-25T17:43:33.467 に答える
0

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

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

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

関数を呼び出して、fetchRequestBlock に適切なデータをフェッチさせます。

ただし、RestKit は、そのままでは部分的な更新要求をうまく処理できません。非常に活発な RestKit google グループで、より多くの幸運が得られるかもしれません。

于 2012-05-08T17:19:15.597 に答える