2016-08-19 13 views
0

この質問は、MS Azureのバックエンドに簡単に表とのiOS 9.3のクライアントアプリの同期データが含まれます。直接サーバ側簡単に表に削除し、その後、クライアント側で同期

私はAzureの上のモバイルアプリを作りました。その後、私はその目的のCスタータープロジェクトをダウンロードします。私はMSSyncTableのヘッダーファイルとドキュメントを見ています。私は の挿入、削除、更新、いくつかの読み込みメソッドを試してみました。

一般的に、MSSyncContextのデータソースは、ローカルストア内の指定されたアイテムを削除/追加/更新する方法で動作します。次に、削除/追加/更新をモバイルサービスに送信する要求をキューに入れます。

私は複数のクライアントでテストしましたが、結果はすべてうまくいきました。

しかし、私はユーザーがサーバー上で直接削除する状況で何が起こるかに興味があります。言い換えれば、私は私のポータルの簡単表に移動して、そのような「リッキー」上で直接削除を行うと言う:

enter image description here

その後、私は私のクライアントにリフレッシュするために引っ張ります。私はXcodeののコンソールでこのエラーログを取得:

- [QSTodoService logErrorIfNotNil:] - ERRORエラードメイン= com.Microsoft.MicrosoftAzureMobile.ErrorDomainコード= -1170 "すべての操作が正常に完了していない" のUserInfo = {NSLocalizedDescription =ありませんすべての操作が正常に完了し、com.Microsoft.MicrosoftAzureMobile.ErrorPushResultKeyは=クライアントアプリがリフレッシュしようとしているので、これが期待されている}

( 「の項目が存在しない」、 を「項目が存在しません」)サーバーからのデータRickyに。しかし、私はそれを削除したので、データリッキーはそこにありません。

ここで、クライアントアプリのローカルデータリッキーがまだ存在します。また、データRickyを更新する要求は、常にクライアントのサービスキューにあります。したがって、私が今からやることは、「データリッキーをリフレッシュする」という要求が常に送られ、結果として「アイテムが存在しない」というメッセージが当然常に戻って来るため、このエラーが発生します。

私の質問は、この特定の問題を解決する方法はありますか?

この特定の使用法は違法であり、決して行うべきではないのでしょうか?

ありがとうございました!

EDIT:

私は、メソッドのドキュメントが指定しただけのように...など、操作保留中、すべてのローカルデータをパージするMSSyncTableのforcePurgeWithCompletionメソッドを使用して試してみました。

しかし、この方法は私にNSErrorを与える:[コード= -1180それがサーバーに送信され、まだ応答を受信した操作を保留しているので、「テーブルをパージすることができません]

わからない、どのように私のforcePurgeWithCompletionが機能するように保留中の操作を削除するつもりです。

答えて

1

これは、もう存在しないレコードを更新しようとしているためです。これにより、404 Not Foundエラーがトラップされ、クライアントでエラーが生成されます。

レコードを削除する場合は、行のdeletedフラグをtrueに設定する必要があります。これはクライアントに伝播され、クライアントはレコードを削除します。

この状態になると、ローカルストアでPurge(またはPurgeAsync)を使用する必要があります。これにより、テーブルと操作キューからデータが削除され、サーバーからのデータの再同期が可能になります。

+0

私はiOS用に開発しているので、MSSyncTableのforcePurgeWithCompletionを使用する必要があります。しかし、それは私にパージを強制することはできません:[Code = -1180 "テーブルは、サーバーに送信され、まだ応答を受信して​​いない保留中の操作があるため、パージすることはできません。私はMSのドキュメントを見て、私にこれを行う方法を示すサンプルを見つけることができませんでした。 – rtsao

+0

PurAsAsync()の前にPushAsync()を使用してください。 –

+0

PushAsyncとPurgeAsyncが属するクラスを教えてください。 – rtsao

関連する問題