从核心数据加载

时间:2012-07-12 13:41:54

标签: iphone objective-c core-data

我将各种实体保存到核心数据中。每次我需要访问这些数据时,我都会从Core数据中读取并将所需的实体分配给可变数组。

if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(iForgetAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
}
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil)
{
    // Handle the error.
    NSLog(@"mutableFetchResults == nil");
}
[self setEventsArray:mutableFetchResults];
[eventsTableView reloadData];

问题是,我正在从应用程序中的许多不同页面检索此数据。

使用核心数据时的最佳做法是什么?我应该只在App Delegate中加载数据并在那里分配数组吗?

非常感谢所有建议。

2 个答案:

答案 0 :(得分:1)

使用可变数组进行设置已经是不好的做法。核心数据可以进行排序,过滤和显示,可以说比可变数组要好得多。

您应该考虑使用NSFetchedResultsController来显示您的数据。您可以使用谓词和排序描述符进行过滤和排序。这样的解决方案应该是无限可靠和可扩展的。

关于保存的具体问题,您可以使用托管对象上下文(在类中保留引用或从应用程序委托中获取)以将数据保存在任何位置。

答案 1 :(得分:1)

使用NSFetchedResultsController为您提供所需的功能。确保还使用NSFetchedResultsControllerDelegate协议。使用NSFetchRequest进行排序等检索。