Ios 解析未更新的固定对象

Ios 解析未更新的固定对象,ios,parse-platform,Ios,Parse Platform,我有以下代码来更新服务器上已更改的对象: NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [PFCloud callFunctionInBackground:@"getAllData" withParameters:@{@"LastUpdate": [self getLastSyncDate], @"Scan": @"NO"} block:^(NSArray *result, NSError *error){

我有以下代码来更新服务器上已更改的对象:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[PFCloud callFunctionInBackground:@"getAllData" withParameters:@{@"LastUpdate": [self getLastSyncDate], @"Scan": @"NO"} block:^(NSArray *result, NSError *error){        
    if (!error) {
        for (int x = 0; x < result.count; x++) {
            PFObject *object = [result objectAtIndex:x];
            [object unpinInBackgroundWithName:object.parseClassName block:^(BOOL succeeded, NSError *error){
                if (!error) {
                    if ([object[@"deleted"] boolValue] != YES) {
                        [object pinInBackgroundWithName:object.parseClassName block:^(BOOL succeeded, NSError *error){
                            if (x == result.count - 1) {
                                [self performSelector:@selector(reloadTableView) withObject:nil afterDelay:0.3];
                            }
                        }];
                    }
                }
            }];
        }
        [defaults setObject:[NSDate date] forKey:@"LastSynced"];
        [defaults synchronize];
    }
    [self reloadTableView];
}];
NSUserDefaults*默认值=[NSUserDefaults standardUserDefaults];
[PFCloud callFunctionInBackground:@“getAllData”,参数:@{@“LastUpdate”:[self getLastSyncDate],@“Scan”:@“NO”}块:^(NSArray*结果,NSError*错误){
如果(!错误){
对于(int x=0;x
但是我的对象没有更新。从本地数据存储调用PFQuery会显示旧版本


有什么想法吗?

看起来您有一堆相互嵌套的后台函数,这导致了一个赛车错误

以下是代码的操作顺序:

  • 获取数据
  • 迭代每项更新并在后台保存更改(这是关键)
  • 同步化
  • 重新装载
  • 仅仅到迭代结束并不意味着所有保存都已完成-您需要等到步骤2中的所有保存完成后,才能继续执行步骤3和步骤4

    建议的操作顺序:

  • 获取数据
  • 将一个全局设置为对象数,将另一个全局设置为已更新的对象数(从0开始)
  • 迭代更新的每个项目,并使用函数检查是否所有更新都已完成,即两个全局更新是否相等**只有在所有更新完成后,您才能同步并重新加载
  • 大概是这样的:

    //Declare these two globally
    int total; 
    int complete;
    
    
    complete = 0;
    *defaults = [NSUserDefaults standardUserDefaults];
    [PFCloud callFunctionInBackground:@"getAllData" withParameters:@{@"LastUpdate": [self getLastSyncDate], @"Scan": @"NO"} block:^(NSArray *result, NSError *error){        
        if (!error) {
            total = result.count;
            for (int x = 0; x < result.count; x++) {
                PFObject *object = [result objectAtIndex:x];
                [object unpinInBackgroundWithName:object.parseClassName block:^(BOOL succeeded, NSError *error){
                    if (!error) {
                        if ([object[@"deleted"] boolValue] != YES) {
                            [object pinInBackgroundWithName:object.parseClassName block:^(BOOL succeeded, NSError *error){
                                self.total++;
                                [self updateCompleteCheck];
                            }];
                        }
                    }
                }];
            }
        }
    }];
    
    -(void)updateCompleteCheck 
    {
        if(total == complete) {
            //Only when this is done do you know, for certain, the update is really complete
            [defaults setObject:[NSDate date] forKey:@"LastSynced"];
            [defaults synchronize];
            [self reloadTableView];
        }
    }
    
    //全局声明这两个
    整数合计;
    int完成;
    完成=0;
    *默认值=[NSUserDefaults standardUserDefaults];
    [PFCloud callFunctionInBackground:@“getAllData”,参数:@{@“LastUpdate”:[self getLastSyncDate],@“Scan”:@“NO”}块:^(NSArray*结果,NSError*错误){
    如果(!错误){
    total=result.count;
    对于(int x=0;x