使用NSFetchedResultsController的自定义部分?

Tri*_*riz 13 iphone cocoa-touch core-data uitableview

我正在制作一个带有结果的分段表,但我很难找到定制的部分.

通常,只有一个属性可以排序,并用于sectionNameKeyPath:生成节.但我的排序属性是动态计算的,我似乎无法fetchedResultsController正确使用它...

更新:使用下面的jbrennan的建议,我真的很接近预期的功能.我添加了一个类别NSDate,返回"天前"数字; 把它放在这里给我基于这些数字的部分:

NSFetchedResultsController *aFetchedResultsController =
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
    managedObjectContext:managedObjectContext
    sectionNameKeyPath:@"myDateAttribute.daysAgo"
    cacheName:@"Root"];
Run Code Online (Sandbox Code Playgroud)

这就是我被困住的地方:我不需要它们按"天前"排序,我需要根据实体中的其他属性通过一些计算对它们进行排序.所以我不能只调用那个自定义的Category方法,我需要调用带参数的方法,如下所示:

[myDateAttribute sortingRoutine:thisObject.value]
Run Code Online (Sandbox Code Playgroud)

或类似的东西.我希望这有一定程度的意义.非常感谢,如果你可以帮助:)

jbr*_*nan 16

我在一个(即将推出)iPhone应用程序中做了类似的事情.我的部分被这样的日期划分:昨天,今天,明天,未来......

无论如何,我的诀窍是向NSDate添加一个Category来确定我所获取的对象属于哪个部分.

我的托管对象有一个名为dueDate的属性,它是一个NSDate.配置获取的结果控制器时,我用作@"dueDate.relativeDate"节键路径.

在类别中,-relativeDate被声明为返回一个NSString并且也作为一个readonly属性(其中任何一个都可能就足够了,我没有尝试两者兼而有之,但它不会同时影响方法和属性声明).然后我简单地实现了它的方法,它工作得很漂亮.


Mas*_*aro 7

您可以尝试以下方法.

在Task实体中向您的核心数据模型添加transient属性.然后执行

- (void)awakeFromFetch
Run Code Online (Sandbox Code Playgroud)

任务NSManagedObject类中的方法.查看其文档.在该方法中,您可以使用其他属性的值为transient属性设置值.请注意,对于您可以执行的操作存在一些限制,但在文档中对此进行了详细说明(最值得注意的是,您无法修改关系或传递参数;但是,如果您可以仅使用其他属性的值计算瞬态属性/关系应该是完美的).

完成此操作后,只需使用transient属性作为传递的属性即可返回各个部分.