版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_31177681/article/details/79637420
原来是在context里面使用for循环修改数据,现在使用NSBatchUpdateRequest直接修改数据库数据然后把结果返回给context,解决大批量数据修改导致APP卡顿的问题
NSBatchUpdateRequest *batchRequest = [[NSBatchUpdateRequest alloc] initWithEntity:[QXChatMessage entity]];
batchRequest.predicate = [NSPredicate predicateWithFormat:@"readState == %@ AND session == %@ AND msgStatus == %@", [NSNumber numberWithBool:UNREAD], session, [NSNumber numberWithInteger:QXChatMessageStatusNormal]];
batchRequest.propertiesToUpdate = @{@"readState" : [NSNumber numberWithInt:1]};
batchRequest.resultType = NSUpdatedObjectsCountResultType;
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_chatMessageContext];
NSError *error = nil;
NSBatchUpdateResult *batchResult = [localContext executeRequest:batchRequest error:&error];
NSNumber *updateCount = batchResult.result;
DDLogInfo(@"update %@ items in DataBase", updateCount);
NSArray *unReadMessages = [self getUnreadIMMessageBySessionID:session.sessionID];
DDLogInfo(@"There are %lu unReadMessages in chatMessageContext", unReadMessages.count);