使用NSFetchRequest(CoreData)填充数组

时间:2011-11-19 08:44:35

标签: ios xcode core-data uiviewcontroller nsfetchrequest

我为iPad创建了一个使用Apple "Use CoreData"模板的项目。

我定制了几件事,例如对象的名称,但系统保持不变。

Apple使用的MasterViewController.hUITableViewControllerDetailViewController.h,这是一个简单的UIViewController。在UITableView MasterViewController.h中选择其中一个对象后,它会将其属性赋予DetailViewController

现在出现问题:

我创建了一个名为ResultsViewController.h的第三个视图控制器,它应该显示所有数据(对象的属性)。

我想使用一个或多个NSArray(s),它应该包含我的所有数据(不仅仅是所选的全部。所以如果你创建了5个对象,你想要有5次NSArray)。

(1)如何获取xcoredatamodel的值以便能够在ResultsViewController中访问它们?发送获取请求对我不起作用?

(2)如何确定我在UITableViewMasterViewController.h)中创建的对象数量?

CoreData结构:

简单,一个实体,几个属性,就是它!

非常感谢!

1 个答案:

答案 0 :(得分:9)

首先:您不应该将所有数据放入数组中。一旦数据量增长,这将导致内存问题。核心数据实际上旨在非常有效地获取您需要的数据,而无需维护昂贵的并行数据结构。

因此,首选方法是将相同的NSManagedObjectContext传递给ResultsViewController,然后根据需要获取自己的数据。

但是,如果你真的想要获取所有数据,那很简单。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityName"
      inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSError *error = nil;
NSArray *fetchedObjects = [self.managedObjectContext
      executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];

数组fetchedObjects现在包含您的所有数据。您可以按常规方式访问属性(例如,使用点表示法或KVC)。