gpt4 book ai didi

ios - 解析固定对象不更新

转载 作者:行者123 更新时间:2023-11-29 12:23:14 25 4
gpt4 key购买 nike

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

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];
}];

但是我的对象没有更新。从本地数据存储调用 PFQuery 显示旧版本。

有什么想法吗?

最佳答案

看起来您有一堆相互嵌套的后台函数,这会导致竞速错误。

这是您的代码的操作顺序:

  1. 获取数据
  2. 遍历每个项目以获取更新并在后台保存更改(这是关键)
  3. 同步
  4. 重新加载

刚结束迭代并不意味着所有保存都已完成 - 您需要等到步骤 2 中的所有保存都完成后再继续步骤 3 和 4。

建议的操作顺序:

  1. 获取数据
  2. 设置一个包含对象数量的全局变量,以及另一个包含已更新对象数目的全局变量(从 0 开始)
  3. 遍历每个项目以进行更新并使用一个函数检查是否所有更新都已完成,即您的两个全局是否彼此相等。 **只有当所有更新都完成后,您才会同步并重新加载

像这样:

//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];
}
}

关于ios - 解析固定对象不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29974039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com