我有一个从CoreData获取的36行数组。每行有三个属性:podNumber,pieceNumber和colorNumber。核心数据:编辑许多属性laggy性能
我想要做的是将结果以六个小组进行洗牌。这样每个吊舱有六个部分,这些部分将被洗牌。
我能够有效地做到这一点;然而,当我用随机数值更新CoreData时,性能显然很低。我会说完成循环需要1-1.5秒。
我尝试了两种方法:1)删除从CoreData旧数组和添加新的一个2)搜索在光盘中的唯一的行和更新
我发现的第一个方法是稍快。有没有人对我如何加快速度有所了解?是否有更有效的方式来更新大量核心数据。我是否需要将其作为后台进程,以及如何工作。
谢谢。 MJ
这里是方法一:
//Fetch them all and then delete them all
NSFetchRequest * fetchPieceColors = [[NSFetchRequest alloc] init];
[fetchPieceColors setEntity:[NSEntityDescription entityForName:@"PieceColors" inManagedObjectContext:managedObjectContext]];
[fetchPieceColors setPredicate:[NSPredicate predicateWithFormat:@"(game = %@)",games]];
[fetchPieceColors setIncludesPropertyValues:NO];
NSError * error = nil;
NSArray * pieceColor = [managedObjectContext executeFetchRequest:fetchPieceColors error:&error];
[fetchPieceColors release];
for (NSManagedObject * piece in pieceColor) {
[managedObjectContext deleteObject:piece];
}
NSError *saveError = nil;
[managedObjectContext save:&saveError];
//Add back
for (int b=0;b<6;b++) {
for (int j=0;j<6;j++) {
NSError *error;
NSManagedObject *fetchPieceColors = [NSEntityDescription
insertNewObjectForEntityForName:@"PieceColors"
inManagedObjectContext:managedObjectContext];
[fetchPieceColors setValue:[NSNumber numberWithInt:b] forKey:@"podNumber"];
[fetchPieceColors setValue:[NSNumber numberWithInt:j] forKey:@"pieceNumber"];
[fetchPieceColors setValue:[shuffledArray objectAtIndex:(b*6)+j] forKey:@"colorNumber"];
[fetchPieceColors setValue:games forKey:@"game"];
if (![managedObjectContext save:&error])
{
NSLog(@"Problem saving: %@", [error localizedDescription]);
}
}
}
那肯定会加快速度。我只需将[managedObjectContext save:&error]移出for循环。 – 2012-04-26 20:51:44