我在NSSet中有数据,我需要把它放到NSArray中。
我是否需要自己排序(再次,这来自Core Data)或者我可以按排序顺序将其排除吗?
答案 0 :(得分:77)
通过将NSFetchRequest
属性设置为sortDescriptors
的数组,可以在使用NSSortDescriptor
检索数据时指定排序。但是,如果您已经在NSSet
中使用它并且不想再提取其他请求,则可以使用:
[[theSet allObjects] sortedArrayUsingDescriptors:sortDescriptors];
当你调用NSArray
然后再调整另一个排序数组时,它会创建一个临时allObjects
,所以它不是100%有效,但对于合理大小的数据集,开销应该可以忽略不计(和肯定低于分拣成本)。
实际上,我错了 - NSSet也有sortedArrayUsingDescriptors:
方法。所以你可以打电话给[theSet sortedArrayUsingDescriptors:descriptors]
并一次性完成。
答案 1 :(得分:8)
你必须自己排序,但这不是很难......
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sprocket" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortVariable" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
self.sprocketArray = mutableFetchResults;
[sortDescriptors release];
[sortDescriptor release];
[mutableFetchResults release];
[request release];