-1

我将 Parse 用于服务器端。我有一个表格视图,其中包含来自 Parse 的联系人对象列表。如果用户点击对象,则将其保存以进行解析,如果再次点击,则将其从解析中删除。

为了节省我使用的方法:

- (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 方法,它会将其保存到解析中,即使同一个对象过去经历过删除。

这是一个空对象的图片和一个正确保存所有数据的图片: 在此处输入图像描述

您对此有何经验?享受解决这个问题并帮助使 wold 成为一个更好的地方:)

4

1 回答 1

2

将对象 id 设置为 nil 依赖于PFObject类的私有和未记录的特性。即使它现在确实有效,也不能保证总是有效。

您不应该删除该对象,只需设置一个标志以表明它已被删除/删除并将其用于您的逻辑。

或者,您实际上应该在删除本地对象后丢弃它,并使用旧对象值的副本创建一个新对象。

于 2015-05-11T15:31:04.297 回答