Ios 过滤器层次结构
我正在编写一个包含核心数据的应用程序,它必须维护一个具有4个层次结构的目录Ios 过滤器层次结构,ios,objective-c,core-data,hierarchy,hierarchical-data,Ios,Objective C,Core Data,Hierarchy,Hierarchical Data,我正在编写一个包含核心数据的应用程序,它必须维护一个具有4个层次结构的目录 Category <--->> SubCategory <--->> Item <--->> SubItem 使用查询“ab”进行筛选后,我希望看到以下对象: Category: Category 1 SubCategory: SubCategory 1.1 Items: [abc, abd, abg] Category: Category 2 S
Category <--->> SubCategory <--->> Item <--->> SubItem
使用查询“ab”进行筛选后,我希望看到以下对象:
Category: Category 1
SubCategory: SubCategory 1.1
Items: [abc, abd, abg]
Category: Category 2
SubCategory: SubCategory 2.1
Items: [123ab, 456ab]
问题是:我不能对Category
使用fetch请求,因为它只会显示包含满足条件的项的类别,但不会过滤项。
我可以直接获取过滤后的项的集合
,但我必须重建结构类别-子类别-项
,并将其放入一些数组/字典等
有没有更好的方法用CoreData过滤深度嵌套的层次结构?
主要问题:在对其根运行fetch请求时,是否有一种方法可以获取嵌套较深的对象树的叶子?您可以使用
搜索字符串
筛选项
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]initWithEntityName:@"Item"];
NSPredicate *predicate = nil;
if([_searchBar.text length] > 0){
predicate = [NSPredicate predicateWithFormat:@"itemName CONTAINS[cd] %@", _searchBar.text];
}
if(predicate){
[fetchRequest setPredicate:predicate];
}
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"itemName" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
如果需要根据类别
和子类别
对结果进行排序,可以根据优先级使用更多排序描述符,如
NSSortDescriptor *sortDescriptorCategory = [[NSSortDescriptor alloc]initWithKey:@"categoryName" ascending:YES];
NSSortDescriptor *sortDescriptorSubCategory = [[NSSortDescriptor alloc]initWithKey:@"subCategoryName" ascending:YES];
NSSortDescriptor *sortDescriptorItem = [[NSSortDescriptor alloc]initWithKey:@"itemName" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortDescriptorCategory, sortDescriptorSubCategory, sortDescriptorItem, nil]];
您可以用一个“”分隔每个键。就像这样
NSSortDescriptor *sortDescriptorSubCategory = [[NSSortDescriptor alloc]initWithKey:@"Category.SubCategory.Items" ascending:YES];
然后,在iOS 7+中
[YOUR_ARRAY sortedArrayUsingDescriptors:@[sortDescriptorSubCategory]];
或者,旧的iOS版本
[YOUR_ARRAY sortedArrayUsingDescriptors:[NSArray sortDescriptorSubCategory, nil]];
我很难理解您想要过滤项目的标准。您是否可以详细介绍一下子项如何影响fetch request添加了示例和更新的描述。您是否可以发布用于筛选的fetch request
?
[YOUR_ARRAY sortedArrayUsingDescriptors:[NSArray sortDescriptorSubCategory, nil]];