NSSet按类重新组合对象

时间:2013-08-17 17:10:18

标签: ios core-data nspredicate nsfetchedresultscontroller

所以我直接从Core Data关系获得这个NSSet对象。 这个NSSet包含的对象都是同一个基础对象的子类(我们称之为RVSuperClass,它本身就是NSManagedObject的子类。)

我的最终目标是在UITableView中重新组合这些对象,其中每种对象(RVSuperClass子类)将构成一个部分。

即使RVSuperClass的子类不多(因此对象'种类'也不多),NSSet(数百)中可能会有很多对象。因此, for in 循环不是我想要的。

有办法做到这一点吗?我对NSPredicate不是很熟悉,但我想这是最好的方法吗?有没有办法直接在NSFetchedResultsController

中结果

2 个答案:

答案 0 :(得分:2)

  

>子类数不多

这样就可以让超类具有指示子类的属性。现在使用获取结果分组控制器的sectionNameKeyPath是轻而易举的。

答案 1 :(得分:0)

由于我可以控制RVSuperClass的子类,所以我决定使用一个相对笨拙的解决方案,但这种解决方案不能很好地扩展,但在这种情况下它可以工作。

viewDidLoad中,对于RVSuperClass的每个子类,我创建一个谓词:

[NSPredicate predicateWithFormat: @"self isKindOfClass: %@", [RVSubclassA class]];

使用filteredSetUsingPredicate:并在其中添加NSSortDescriptor,我将结果NSArray添加到ivar NSMutableArray,其中每个NSArray将是tableview。

太糟糕了,如果我决定稍后添加NSPredicate的子类,我将不得不修改此代码(并添加另一个RVSuperClass)。