我需要获取核心数据中数千个其他对象之间的对象排名。现在,这里是我的代码:核心数据对象排名(慢)
- (void)rankMethod
{
//Fetch all objects
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Records"];
[fetchRequest setIncludesPropertyValues:NO];
//Sort all objects by date/recent date == better rank
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
NSArray *sortDescriptors = @[sortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];
//Set all objects in a NSArray
NSError *error;
NSArray *recordsArray = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
//Get the rank of my object (self.record) in the array
NSUInteger recordRank = [recordsArray indexOfObject:self.record] + 1;
//Get the count of all objects
NSUInteger recordsCount = [managedObjectContext countForFetchRequest:fetchRequest error:&error];
//NSLog my object rank
NSLog(@"Rank: #%ld/%ld", (unsigned long)recordRank, (unsigned long)recordsCount);
//Console display: "Rank: #4282/5000"
}
这段代码的问题是,越来越对象的指数上了一个大的NSArray(成千上万个对象)可能会非常缓慢(可能几秒钟)。有没有办法直接在核心数据中捕捉对象的排名而不必使用NSArray(即避免访问设备内存)?
谢谢。
为什么你需要排名属性?为获取最后插入的对象? –