【发布时间】:2012-07-11 03:16:19
【问题描述】:
假设有一个名为 testTable 的表:
(NSNumber*) numValue
(NSString*) stringValue
然后假设其中大约有 50 条记录。 numValue 每条记录都不一样。
如果我这样创建 NSFetchedResultController:
NSFetchRequest *request = [[NSFetchedResultsController alloc]
initWithFetchRequest: request
managedObjectContext: context
sectionNameKeyPath: @"numValue"
cacheName: @"testTable"]];
那么我会得到 50 个部分。
我的问题是:
如何获得 2 个部分:
第一个包含numValue 小于一些x 的记录,第二个包含numValue 大于相同x 的记录。
对于x = 15,它可能如下所示:
NSFetchRequest *request = [[NSFetchedResultsController alloc]
initWithFetchRequest: request
managedObjectContext: context
sectionNameKeyPath: @"numValue > 15"
cacheName: @"testTable"]];
可能的解决方案是:
- 我们可以像@Dima 所说的那样编辑我们的实体。
- 在
numberOfSectionsInTableView:中,我们只需查看部分名称并将它们与x进行比较。然后我们可以在tableView:numberOfRowsInSection:中查看这些名称并计算出我们需要什么。但这感觉也很脏。比第一种方法更好,但仍然如此。
更新: 好吧,我几乎想出了第三种方法来做到这一点。感谢@Dima 的链接。 代码如下:
[self setFetchedResultsController: [[NSFetchedResultsController alloc]
initWithFetchRequest: request
managedObjectContext: context
sectionNameKeyPath: [NSString stringWithFormat: @"numValue.compare(%f)", x]];
但是 KVC 合规性存在问题: 带有参数的方法(选择器)显然不符合 KVC。 任何解决方法的想法?
【问题讨论】:
标签: objective-c ios core-data nsfetchedresultscontroller