换句话说,
fetchedResultsController可以返回一个数组数组吗?还是一组NSSets?
下面的代码是我正在尝试做的一个例子。可能吗?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//...
NSSet *objects = [_fetchedResultsController objectAtIndexPath:indexPath];
//...
}
我这样做的原因是:如果用户滑动单元格并删除它。我需要删除该行中的所有对象。而且我还需要在该日/行的所有时钟上进行计算,以显示该单元格上的数据。
这是我的核心数据模型:
每一行必须包含基于它的clockIn属性的给定日期的所有Clock对象。 clockIn是一个NSDate对象。一行应该代表一天。
我可以帮忙找出这个谓词吗?它甚至可能吗?
另外,我已经在Table View中使用了部分。所以这些都是不可能的。 有一个解决方案,我宁愿不去,创建年,月和日,实体。这样可以解决。但是我觉得我需要做到这一点似乎很奇怪,考虑到我的clockIn属性应该给我所需要的一切......
谢谢!
答案 0 :(得分:0)
不,它不能。
如上所述:NSPredicate something equivalent of SQL's GROUP BY
“CoreData是一个对象图管理框架,而不是SQL数据存储。因此,您应该尽快 - 让自己脱离SQL思维模式。”
关于手中的问题:
“NSPredicate旨在作为对象图中合格对象的意外谓词。因此,您可以获取与查询匹配的所有对象,但这与对这些结果进行分组不同。如果您要这样做聚合操作,使用键值编码的集合运算符。核心数据可能会将这些转换为合理的SQL,但这只是一个实现细节。“
答案 1 :(得分:0)
您可以使用TLIndexPathTools通过子类化TLIndexPathController
(NSFetchedResultsController
的替代方法,在几行代码中完成此操作。我没有对此进行过测试,但这里有一个类似于它的样子:
#import <TLIndexPathController.h>
@interface GroupedIndexPathController : TLIndexPathController
@end
#import "GroupedIndexPathController.h"
#import "TLIndexPathSectionInfo.h"
@implementation GroupedIndexPathController
- (void)setDataModel:(TLIndexPathDataModel *)dataModel
{
NSMutableArray *items = [[NSMutableArray alloc] initWithCapacity:dataModel.numberOfSections];
for (TLIndexPathSectionInfo *sectionInfo in dataModel.sections) {
if (sectionInfo.objects) {
[items addObject:sectionInfo.objects];
}
}
TLIndexPathDataModel *groupedDataModel = [[TLIndexPathDataModel alloc] initWithItems:items andSectionNameKeyPath:nil andIdentifierKeyPath:nil];
[super setDataModel:groupedDataModel];
}
@end
您要做的是设置索引路径控制器的获取请求,并将sectionNameKeyPath
设置为您要分组的属性。执行提取时,父类将生成组织成部分的数据模型。上面的代码会覆盖dataModel
属性设置器,将这些部分映射到分组对象的单个部分,如:
分段数据模型
Section 0
Managed Object 0.0
Managed Object 0.1
Managed Object 0.2
Section 1
Managed Object 1.0
Managed Object 1.1
分组数据模型
Section 0
[Managed Object 0.0, Managed Object 0.1, Managed Object 0.2]
[Managed Object 1.0, Managed Object 1.1]
然后将此分组数据模型传递给super的dataModel
属性设置器。表视图控制器只能看到分组数据模型。分段数据模型将完全位于GroupedIndexPathController
的内部。如果获取结果发生变化,GroupedIndexPathController
将通过controller:didUpdateDataModel:
委托方法向分组数据模型报告更新,TLTableViewController
将自动为您执行批量更新。
TLIndexPathTools提供了几个示例项目,Core Data example演示了如何与Core Data集成。您只需提供GroupedIndexPathController
的实例,而不是标准TLIndexPathController
。
您提到您的表使用了部分。如果您可以详细说明,我可以修改上述内容以满足您的特定要求。