0

我正在测试 Parse localDatastore 并在新服务器 PFQuery 之后努力刷新本地数据存储。

PFQuery 工作正常,似乎将数组固定到本地数据存储区就好了。当我更改服务器上数组的内容时,服务器 PFQuery 会下拉更新的数组,但本地数据存储似乎没有更新:

- (void)viewDidLoad {
[super viewDidLoad];

// Query Parse
PFQuery *query = [PFQuery queryWithClassName:@"contacts"];
NSArray *objects = [query findObjects];
[PFObject pinAllInBackground:objects block:^(BOOL succeeded, NSError *error) {
    if(succeeded) {
        NSLog(@"Successfully retrieved %lu records from Parse.", (unsigned long)objects.count);
    } else if (error) {
        NSLog(@"Error");
    }
}];
}

然后使用 UIButton 将本地数据存储的内容记录到控制台:

-(IBAction)showDatastore {

// Query the Local Datastore
PFQuery *query = [PFQuery queryWithClassName:@"contacts"];
[query fromLocalDatastore];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        NSLog(@"Successfully retrieved %lu contacts from Datastore.", (unsigned long)objects.count);
    } else {
        // Log details of the failure
        NSLog(@"Error: %@ %@", error, [error userInfo]);
    }
}]; 
}

在我的示例中,原始数组有 15 个对象。每个数组的计数最初都是 15。然后我从服务器数组中删除一个对象,初始 PFQuery 计数为 14,但本地数据存储计数仍为 15。

Parse 的文档指出:

当一个对象被固定时,每次你通过获取或保存新数据来更新它时,本地数据存储中的副本都会自动更新。

但情况似乎并非如此......至少不是这个推荐的代码。有什么我想念的吗?

4

1 回答 1

0

这取决于您如何删除对象。如果您使用deleteEventually,则删除将传播到 LDS

您可以使用与在网络上使用的完全相同的查询类型从本地数据存储中进行查询。结果将包括与已固定到您设备的查询匹配的每个对象。该查询甚至会考虑您对尚未保存到云的对象所做的任何更改。例如,如果您在一个对象上调用 deleteEventually,它将不再从这些查询中返回。

但是,如果您希望它起作用,任何其他方法都需要显式取消固定。

deleteEventually是我相信的首选方法。

于 2015-10-25T00:54:56.757 回答