【问题标题】:Sorting nsfetchedresultscontroller排序 nsfetchedresultscontroller
【发布时间】:2011-12-15 21:06:00
【问题描述】:

我在核心数据的实体中有这样的结构:

ID    Region    SubRegion   SubRegionID    CellText
1      Face      Mouth         2             something
2      Face      Eyes          1             ...
3      Face      Nose          4             ...
...

但我希望我的 tableview (nsfetchedresultscontroller) 以这种方式排序:

在每个部分内:按 ID 属性排序的单元格 tableView 中的部分:SubRegion 名称,但按 SubRegionID 排序。

我怎样才能做到这一点?现在我正在这样做,但我不知道按 subregionID 对部分标题进行排序的最佳做法是:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription 
                               entityForName:@"DataBase" inManagedObjectContext:context];
[fetchRequest setEntity:entity];

NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(Region like '%@')", @"Face"]];
[fetchRequest setPredicate:requestPredicate];

NSSortDescriptor *ID = [[NSSortDescriptor alloc] 
                          initWithKey:@"ID" ascending:YES];

[fetchRequest setSortDescriptors:[NSArray arrayWithObjects: ID, nil]];

[fetchRequest setFetchBatchSize:10];

fetchedResultsController  = 
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                                    managedObjectContext:context sectionNameKeyPath:@"SubRegion" 
                                               cacheName:nil];

fetchedResultsController.delegate = self;

感谢您的宝贵时间!

【问题讨论】:

    标签: ios uitableview sorting core-data nsfetchedresultscontroller


    【解决方案1】:

    您的谓词中有一些冗余。而不是

    NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(Region like '%@')", @"Face"]];
    

    应该只是

    NSPredicate *requestPredicate = 
      [NSPredicate predicateWithFormat:@"%K == %@", @"Region", @"Face"];
    

    这也可能与您设置NSFetchedResultsController 的方式有关。您应该将sectionNameKeyPath 设置为“SubRegionID”,而不是“SubRegion”。在您的 tableView datasource 方法 titleForSection: 中,您应该根据 ID 返回子区域的名称。

    【讨论】:

    • 感谢您的建议。但是问题仍然存在于我使用的排序逻辑上。我得到按 ID 排序的单元格,但部分名称不按 SubRegionID 排序...我需要按 subregionID 排序的面部子区域(部分)和按 ID 排序的这些部分内的单元格。你有什么建议吗?谢谢!
    • 这与您设置NSFetchedResultsController 的方式有关。您应该将sectionNameKeyPath 设置为"SubRegionID",而不是"SubRegion"。然后,在您的 tableView datasource 方法 titleForSection: 中,您应该根据 ID 返回子区域的名称。
    • 我就是这样用的。但我认为可以直接使用 sortdescriptors 对其进行排序。谢谢你的建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多