Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.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 如何尽快更新所有记录?_Ios_Core Data - Fatal编程技术网

Ios 如何尽快更新所有记录?

Ios 如何尽快更新所有记录?,ios,core-data,Ios,Core Data,我需要用相同的值更新所有记录。我不想对对象进行迭代,因为对2000多个对象进行迭代大约需要2秒钟。基本上,我在本地拥有所有用户,并从服务器接收用户id。现在我想将属性'requested'设置为false,但用户从服务器返回的除外- 现在是怎么做的(这是完全错误的!): 遍历所有用户(大约2000个用户)并更正其请求的值 NSFetchRequest * allUsers = [[NSFetchRequest alloc] init]; [allUsers setEntity:[NSEntity

我需要用相同的值更新所有记录。我不想对对象进行迭代,因为对2000多个对象进行迭代大约需要2秒钟。基本上,我在本地拥有所有用户,并从服务器接收用户id。现在我想将属性'requested'设置为false,但用户从服务器返回的除外-

现在是怎么做的(这是完全错误的!):

遍历所有用户(大约2000个用户)并更正其请求的值

NSFetchRequest * allUsers = [[NSFetchRequest alloc] init];
[allUsers setEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:context]];
NSArray *users = [context executeFetchRequest:allUsers error:&error];

NSArray *userIDs = [JSON objectForKey:@"users_ids"];
for (User *user in users) {
    if ([userIDs containsObject:user.userID]) {
        user.requested = [NSNumber numberWithBool:YES];
    } else {
        user.requested = [NSNumber numberWithBool:NO];
    }
    user.requested = [NSNumber numberWithBool:NO];
}
[context save:nil];
我的想法是:

对于具有类似sql语句的每个对象,Set request=false。通过服务器返回的id(平均20个),并为这些id设置request=true

// UPDATE users SET requested = false WHERE 1=1

NSArray *userIDs = [JSON objectForKey:@"users_ids"];
for (int i = 0; i < [userIDs count]; i++) {
    User *user = [User userWithServerID:[userIDs[i] integerValue] usingManagedObjectContext:context];
    user.requested = [NSNumber numberWithBool:YES];
}
[context save:nil];
//请求的更新用户集=false,其中1=1
NSArray*userIDs=[JSON objectForKey:@“users_id”];
对于(int i=0;i<[userIDs count];i++){
User*User=[User userWithServerID:[userIDs[i]integerValue]usingManagedObjectContext:context];
user.request=[NSNumber numberWithBool:YES];
}
[上下文保存:nil];
那么,如何用一个“查询”更新所有记录呢?或者有没有人对如何实现这一点有更好的想法(也许是执行迭代的更高效的方法)

将它放在后台线程中是一个解决方案(也许),但我仍然希望在将其放在后台线程中之前先对其进行优化


谢谢大家!

您仍然需要获取所有对象,但您可以在一行中完成所有操作

[[fetchedResultsController fetchedObjects] makeObjectsPerformSelector:@selector(setYourValue:) withObject:[NSNumber numberWithBool:YES]];
或者只是循环数组

NSArray *objects = [context executeFetchRequest:allRequest error:&error];
[objects setValue:[NSNumber numberWithBool:YES] forKey:@"user_ids"];
//now save your changes back.
[context save:&error];