NSFetchedResultsController和多个关系

时间:2011-06-02 04:26:00

标签: iphone objective-c nsfetchedresultscontroller

我有一个显示历史数据的UITableView。这每天分为一个部分。每天都会发生多种事情(例如,我睡觉的某一天,吃了一些食物,做了一些运动等)。每个“事物”由不同的实体表示。因此,在前面的例子中,我有Day,Sleep,Food和Exercise实体。睡眠,食物和运动都通过一对多关系将Day实体作为父母。

目前我正在做的是加载所有Day实体,然后每天我将Sleep,Food和Exercise实体加载到一个单独的数组中,并按日期排序。毋庸置疑,当有大量数据时,这会变慢。

是否可以在此实例中使用NSFetchedResultsController?

1 个答案:

答案 0 :(得分:0)

这只是猜测,但我认为以下方法可行:

编辑 - 我刚刚用一个简单的案例验证过,这确实有用

让你的所有事件实体(Sleep,Food,Exercise)继承自基类实体(你可以称之为“Event”),然后在设置你的NSFetchedResultsController将使用的NSFetchRequest时使用以下内容:

NSFetchRequest *fr = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:_managedObjectContext];
[fr setEntity:entity];

理论上,这会导致结果控制器返回从 Event 继承的所有现有实体。您还可以将关系置于基类(Event)中的 Day ,因为所有子类都有共同点。此外,您需要为获取请求指定一个谓词,以便仅获取您所追踪的特定日期的事件。

让我知道这是否有效!