4

コアデータでのRestKitの使用ユーザーがインターネットに接続せずにオブジェクトにフラグを付けてコアデータで保存することにより、オブジェクトを追加、編集、または削除するときにオフラインサポートを提供しています。

インターネットが再び利用可能になった場合は、追加/編集/削除されたすべてのオブジェクトをフェッチして配列に保存し、通常のメソッドを使用して各アイテムをループしてサーバーに配置します。

配列のリスト
-fetchedAddedCompanies
-fetchedEditedCompanies
-fetchedAddedContacts
-fetchedEditedContacts
-fetchedDeletedContacts

Initメソッド(編集された会社の例)

// Added Companies
...

// Edited Companies
for (Company *tempObj in fetchedAddedCompanies)
{
    // Find keys for selected languages
    [self updateAccountToServer:tempObj:addCompanyContext];
}

// ...

updateAccountToServerの最後に、サーバーへのマッピングを含むオブジェクト(self.company)を投稿します。

...
[objectManager postObject:self.company mapResponseWith:[companyMapper inverseMapping] delegate:self];
...

質問

すべての編集/削除メソッドとは対照的に、サーバーは新しく作成されたオブジェクトごとにIDを返すため、ユーザーがいくつかのオブジェクトを更新し、特別なものがいくつかの新しいオブジェクトを追加したときに、より効率的なソリューションを探しています。保存されます。

1)編集されたオブジェクトごとにupdateAccountToServerなどを使用せず、代わりにオブジェクトの配列を送信します
2)RKObjectManagerと一緒にRKRequestQueueを使用します(この質問と適切な回答に関して

私の意見では、1)各リクエストのresourcePathに一意のIDが含まれているため、実装が難しいため、2)を試しましたが、を使用して各リクエストのマッピングをバインドする可能性がありません。

[syncQueue addRequest:[[RKObjectManager sharedManager] objectLoaderWithResourcePath:tempString delegate:self]]; 

あなたのアイデアをありがとう!

4

2 に答える 2

1

1 の場合、挿入/更新/削除されたオブジェクトの NSArray を新しいオブジェクトにカプセル化し、それをサーバーにポストできます。これが機能するためには、サーバーが解読するために変更されたオブジェクトに正しいビットが設定されていることを確認する必要があります。また、サーバーがオブジェクトを受信し、それを分解して変更されたオブジェクトの配列を取得できることを確認する必要があります。

于 2012-07-23T23:50:43.003 に答える
1

私自身と他の何人かは、これを RestKit に自動的に統合する開発ブランチに積極的に取り組んでいます。

NSManagedObjectContext の変更を監視する RK 内に同期マネージャーを実装しています。ネットワークが利用できない場合は、ネットワークが復旧するまでそれらの要求をキューに入れます。

このコードに関するヘルプ/アイデアをぜひお寄せください。このページで使用例について詳しく教えていただければ:

https://github.com/RestKit/RestKit/pull/573

于 2012-05-08T04:33:08.670 に答える