繁体   English   中英

iOS-Parse.com使用本地数据存储区同步多个设备

[英]iOS-Parse.com Syncing multiple devices with local datastore

我正在尝试在iOS上使用local-datastore。

假设我有两个或更多设备。

我使用saveEventually在本地(和云端)保存数据。 仅在一台设备上工作时,它可以正常工作。

当我开始使用多个设备时,要同步我使用:

PFQuery *query = [UserPreference query];
[query whereKey:@"userId" equalTo: [PFUser currentUser].objectId];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){ 
if(!error){
    [UserPreference pinAllInBackground:objects block:^(BOOL succeeded, NSError *error) {<---- objects here are fine
    if(succeeded){
     [query fromLocalDatastore];
     NSLog(@"Local %@", [(UserPreference*)[[query findObjects] objectAtIndex:0] filterContext ]); <--- however here the old value is retrieved
     }
   }];
  }
}];

所以我从云中获得了适当的对象,然后我PinAll但是当我从localDataStore中检索旧的值被检索?

任何人都可以善意解释:1。如果这是可行的,即使用本地数据存储在两个设备之间进行同步2.我做错了什么?

PS:我注意到对象中的serverData包含正确的信息但不更新对象

看来这很有效。 因此,当您从服务器获得更新时,您需要取消所有具有名称的对象,然后使用相同的名称将它们固定。 之后你可以查询pinWithName:

  PFQuery *query = [UserPreference query];
[query whereKey:@"userId" equalTo: [PFUser currentUser].objectId];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if(!error){
        [UserPreference unpinAllObjectsInBackgroundWithName:@"userPreference" block:^(BOOL succeeded, NSError *error) {
                [UserPreference pinAllInBackground:objects withName:@"userPreference"];
        }];
    }

我有相同的要求,我发现上述有用,但有一些其他数据和其他人可能认为有用的不同选项。

我也有两个设备。 所有数据都在本地数据存储区中并推送到解析服务器,这很有效,我可以在服务器上看到数据。 但是,当我使用相同的帐户详细信息登录第二个新设备时,我无法获取所有数据。

登录后:

[PFUser logInWithUsernameInBackground:user password:pass block:^(PFUser *user, NSError *error) {
if (user) { /* success, user object is in local datastore */ }
}];

如果成功,则可以使用与用户对象关联的任何数据。 但是必须要求与该用户相关的任何其他对象。 因此,通过用户对象访问的字段存在,但是与用户对象相关的记录不存在。 我发现以下内容可以获取其他数据:

PFQuery *query = [PFQuery queryWithClassName:@"History"];
[query whereKey:@"user" equalTo:[PFUser currentUser]];

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if(!error){
        NSLog(@"Fetched %lu objects", (unsigned long)[objects count]);
        for (PFObject* item in objects)
            [item pinInBackground];
    } else {
        NSLog(@"Parse error pulling data after login: %@ %@", error, [error userInfo]);
    }
}];

最后,如果您希望服务器上的数据发生变化,您必须进行轮询。 我已经通过网络上的解析登录更新了服务器上的数据,至少我没有看到这些更改传播到设备。 我必须用查询将它们拉下来然后固定它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM