-1

サーバー側にParseを使用しています。そして、Parse の Contacts オブジェクトのリストを含むテーブル ビューがあります。ユーザーがオブジェクトをタップすると解析のために保存され、再度タップすると解析から削除されます。

保存するには、次の方法を使用します。

- (void)addContact:(Contact *)contact withBlock:(void (^)(void))completion {
    [contact saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (completion) completion();
    }];
}

削除するには、これを使用します:

- (void)removeContact:(Contact *)contact withBlock:(void (^)(void))completion {
    [contact deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        contact.objectId = nil;
        if (completion) completion();
    }];
}

objectId を nil に設定したのは、テーブル ビューでこのプロパティを使用して、オブジェクトが既に解析されているかどうかを確認するためです。

問題は、ユーザーが保存、削除、保存などの手順を実行した場合です。

  1. 保存: オブジェクトは、すべてのデータを使用して解析時に作成されます。
  2. 削除: オブジェクトは解析から削除されます。
  3. 保存: オブジェクトは解析時に作成されますが、データはありません (objectId のみ)。

これは通常の手順ですか?電話では、削除メソッドの後でも、オブジェクトには常にすべてのデータがあります。したがって、すべてのデータを含むオブジェクトに対して save メソッドを実行すると、同じオブジェクトが過去に削除されたとしても、解析に保存されると思います。

以下は、1 つの空のオブジェクトと、すべてのデータとともに正しく保存されたオブジェクトの図です。 ここに画像の説明を入力

これについてあなたの経験は何ですか?この問題の解決を楽しみ、wold をより良い場所にする手助けをしてください :)

4

1 に答える 1

2

オブジェクトIDをそのままnilに設定すると、クラスのプライベートで文書化されていない機能に依存していますPFObject。現在動作していても、常に動作するとは限りません。

オブジェクトを削除せず、削除/削除されたことを示すフラグを設定して、それをロジックに使用する必要があります。

または、削除されたローカル オブジェクトを実際に破棄し、古いオブジェクト値のコピーを使用して新しいオブジェクトを作成する必要があります。

于 2015-05-11T15:31:04.297 に答える