Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS-Parse.com将多个设备与本地数据存储同步_Ios_Parse Platform_Local Datastore - Fatal编程技术网

iOS-Parse.com将多个设备与本地数据存储同步

iOS-Parse.com将多个设备与本地数据存储同步,ios,parse-platform,local-datastore,Ios,Parse Platform,Local Datastore,我正在尝试将本地数据存储与iOS一起使用 假设我有两个或多个设备 我使用savefinally在本地(和云上)保存数据。当只在一台设备上工作时,它工作正常 当我开始使用多个设备时,要同步,我使用: PFQuery *query = [UserPreference query]; [query whereKey:@"userId" equalTo: [PFUser currentUser].objectId]; [query findObjectsInBackgroundWithBlock:^(N

我正在尝试将本地数据存储与iOS一起使用

假设我有两个或多个设备

我使用savefinally在本地(和云上)保存数据。当只在一台设备上工作时,它工作正常

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

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
     }
   }];
  }
}];
PFQuery*query=[UserPreference query];
[query whereKey:@“userId”等于:[PFUser currentUser].objectId];
[查询findObjectsInBackgroundWithBlock:^(NSArray*对象,NSError*错误){
如果(!错误){

[UserPreference pinAllInBackground:objects block:^(BOOL successed,NSError*error){这似乎有效。因此,当您从服务器获得更新时,您需要取消绑定所有具有名称的对象,然后使用相同的名称将其锁定。之后,您可以查询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]);
    }
}];

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

我不太熟悉解析,但我认为您应该使用在您上次的查询中,类似于
[[query fromlatastore]findObjects]
[[query fromPin]findObjects]
Hi@danypata。谢谢您的回答。我认为问题在于pinAll或pin工作不正常,或者我没有正确使用它。在我的情况下,它根本没有更新对象。这让我感到困惑,正如文档所说:“一旦启用本地数据存储,您就可以通过固定对象来存储对象”和“无论何时保存对对象的更改,或从解析中获取新更改,数据存储中的副本都将自动更新,因此您不必担心它。”