0

我在核心数据中保存了 3 个实体。我在应用程序的几个视图控制器中加载这些 - 有时从所有 3 个视图控制器中加载数据。下面是我如何加载这些数据并将其分配给一个数组。一旦它在数组中,然后我根据应用程序的当前页面进行排序、过滤、计数或我需要做的任何事情。

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

我遇到的问题是:

  • 我不喜欢有很多重复的代码——这出现在每个需要核心数据的视图控制器上。
  • 从一个实体中,我正在保存图像的二进制数据,这在我加载该数据时会导致延迟

那么,有没有办法使用以下条件从核心数据加载eventId = [NSString stringWithFormat:@"%@", currentEventId]

或者(可能更合适)有一个单独的类,在应用程序启动时加载数据。然后我可以访问(加载的数据的)类数组以用于当前页面。然后,如果我保存、编辑或删除对象,只需重新加载数据。

任何帮助深表感谢。

4

1 回答 1

1
  1. 对于您的第一个问题,您应该查看将 Ruby on Rails 的 Active Record 引入 CoreData 的 MagicalRecord 它将缩短清除您的核心数据代码。

  2. 请注意,如果您的图像不小,则应将它们存储在与主实体有关系的单独实体中。这应该可以帮助您解决滞后问题,因为只有当您明确要求时,您才会通过关系加载图像。你可以在这里看到Marcus Zarra 的答案(写了一本关于核心数据的好书)。总有一个选项是您的图像对于核心数据来说太大了。

希望能帮助到你

于 2012-07-19T18:13:18.603 回答