如何使用NSFetchedResultsController按字母顺序对UITableView进行排序?
|
当用户按下\“按字母顺序排序\”时,我为表调用以下方法:
- (void) sortByName
{
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@\"name\" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
NSMutableArray *items = [[fetchedResultsController fetchedObjects] mutableCopy];
[items sortUsingDescriptors:sortDescriptors];
int newDisplayOrder = 0;
for (NSManagedObject *managedObject in items)
{
[managedObject setValue:[NSNumber numberWithInt:newDisplayOrder++ ] forKey:@\"displayOrder\"];
}
[sortDescriptor release];
[sortDescriptors release];
// Save the context.
NSError *error = nil;
if (![self.managedObjectContext save:&error])
{
// Need code to handle error properly
NSLog(@\"Unresolved error %@, %@\", error, [error userInfo]);
abort();
}
}
但是由于某种原因,它似乎不是按字母顺序排序,而是将每个项目按其创建的顺序放置。我究竟做错了什么?
没有找到相关结果
已邀请:
4 个回复
田损比报
闯舱酮
对于您的项目,您可能不必检查是否对主线程执行了刷新,除非从除主线程之外的任何其他线程检索数据。
甲车劲
或一步一步完成(不需要是可变的):
顺便说一句,这似乎是对表进行排序的一种复杂方法。您正在数据库中修改displayIndex以反映新的排序顺序。大概NSFetchRequest驱动fetchedResultsController正在基于displayIndex进行排序。 这样会更简单,不需要更改数据库即可简单地更改fetchRequest并重新配置fetchedResultsController。 从NSFetchedResultsController文档: 修改提取请求 你不能 只需将获取请求更改为 修改结果。如果你想 更改获取请求,您必须: 如果使用缓存,请删除它 (使用deleteCacheWithName :)。 通常,您不应该使用缓存 如果您正在更改获取请求。 更改获取请求。调用 performFetch :。
量华