【发布时间】:2014-07-28 14:59:21
【问题描述】:
在 Core Data 中,我有一对多的关系——每个布局都有很多行:
我正在尝试通过分组布局在表格视图中显示数据:
Layout Nr 2342 (with orderPosition 1)
Line 1
Line 2
Line …
Layout Nr 2123 (with orderPosition 2)
Line 1
Line …
…
我正在使用我这样创建的NSFetchedResultsController:
NSEntityDescription *entity = [NSEntityDescription entityForName:@“Line” inManagedObjectContext:managedObjectContext];
NSSortDescriptor *orderPositionDescriptor = [[NSSortDescriptor alloc] initWithKey:@"layout.orderPosition" ascending:YES];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setSortDescriptors:@[orderPositionDescriptor]];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"section=='my_section'"]];
[fetchRequest setPredicate:predicate];
self.fetchController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:@"layout.groupNumber"
cacheName:nil];
所以我将 fetch 控制器设置为按布局 groupNumber 分组,我还将排序描述符设置为按布局位置排序(每个布局都有自己的位置)。一旦数据被添加到核心数据中,它就会显示在表格视图中。一切正常,直到我尝试更改现有 NSFetchedResultsController 的 NSFetchRequest 谓词:
NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"section=='%@'",section]];
[self.fetchController.fetchRequest setPredicate:predicate];
我在谓词中设置了与已经设置完全相同的部分,并且表格中显示的performFetch之后的数据仍然相同,但是布局(表格部分)在表格中更改了位置并且行显示错误布局(基本上无序)。我发现如果我将第一个排序描述符设置为与 sectionNameKeyPath -“layout.groupNumber”相同,那么即使我更改谓词也一切正常。但显然它不是按我想要实现的 orderPosition 排序的。有什么解决办法吗?任何帮助,将不胜感激。
【问题讨论】:
标签: objective-c uitableview core-data nspredicate nsfetchedresultscontroller