排序数据库对象

时间:2014-05-12 07:41:43

标签: ios core-data

我有一个UITableView每个单元格显示唯一的菜单项我希望项目在我的列表中排序但这些菜单项不是来自数组而是来自数据库对象

示例:

cellForRowAtIndexPath{
  Menus_Items *menuItem = [menuCategory.hasMenuItems.allObjects objectAtIndex:indexPath.row];
  lblMenuItemName.text = menuItem.name;

}

如何对菜单项进行排序?如果它是一个数组,我本可以做到的。

NSSortDescriptor *orderSort = [[NSSortDescriptor alloc] initWithKey:@"order" ascending:NO];
// String are alphabetized in ascending order
NSSortDescriptor *strNameSort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];

// Combine the two
NSArray *sortDescriptors = @[orderSort, strNameSort];

arrCategories = [DatabaseHelper getAllData:@"Menus_cat" offset:0 predicate:[NSPredicate predicateWithFormat:@"ofOutlet == %@",outletsObject] sortDescriptor:nil];

// sortedArrayUsingDescriptor is the method use to sort an array which is having multiple parameters in sort descriptor
arrCategories = [arrCategories sortedArrayUsingDescriptors:sortDescriptors];

请帮助。提前致谢

1 个答案:

答案 0 :(得分:1)

menuCategory.hasMenuItems.allObjects是一个数组,因此您可以对其进行排序以获取相应的项目。您可以每次对其进行排序或保留内容的已排序缓存。这些选项都不是理想的选择。

实际上,您希望使用带有排序描述符的获取请求,理想情况下由获取请求控制器管理。通常你会通过使用后退关系来做到这一点。因此,您创建了fetch并将谓词设置为XXX = %@,其中XXX是关系名称,提供的参数是menuCategory

这假设关系是1:很多,如果它很多:很多你需要一个不同的谓词形式。