2011-11-19 41 views
1

我为iPad创建了一个使用Apple的"Use CoreData"模板的项目。使用NSFetchRequest填充数组(CoreData)

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

Apple使用MasterViewController.h这是一个UITableViewControllerDetailViewController.h这是一个简单的UIViewController。一旦你选择UITableView中的一个对象MasterViewController.h它将其属性赋予DetailViewController

现在的问题:

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

我想用一个或多个NSArray(s),它应该包含我的所有数据(而不仅仅是选择,但所有。所以,如果你创建了5个对象,你想拥有5倍NSArray)。

(1)如何获取xcoredatamodel的值以便能够在ResultsViewController中访问它们?发送取回请求不适合我? (2)如何确定我在UITableViewMasterViewController.h)中创建了多少个对象?

CoreData结构:

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

非常感谢!

回答

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)。

+0

谢谢,我自己也找到了一个类似的解决方案,这是迟来接受答案的原因。 – DAS