如何跨多个视图访问核心数据?

时间:2012-09-27 14:35:29

标签: objective-c ios core-data

我正在尝试在我的应用程序中的多个视图中保存和检索数据,现在我已经保存了数据,并且我可以检索该数据,只要我在AppDelegate中,但我添加了另一个视图我希望检索并显示新存储数据的应用程序,但我不确定如何从另一个视图中访问核心数据,我该如何实现这一目标呢?

这是我到目前为止所拥有的,

AppDelegate.m:

// store the data
AppDelegate *app = [UIApplication sharedApplication].delegate;
STUDENT *std = (STUDENT *)[NSEntityDescription insertNewObjectForEntityForName:@"STUDENT" inManagedObjectContext:app.managedObjectContext];
[std setName:@"John"];
[std setNumber:[NSNumber numberWithInteger:1]];
[std setPlace:@"USA"];
[app.managedObjectContext save:nil];

// read the data
NSFetchRequest *req = [[NSFetchRequest alloc]init];
[req setEntity:[NSEntityDescription entityForName:@"STUDENT" inManagedObjectContext:app.managedObjectContext]];
[req setPredicate:[NSPredicate predicateWithFormat:@"name == %@", @"John"]];
STUDENT *stud = [[app.managedObjectContext executeFetchRequest:req error:nil] lastObject];

NSLog(@"%@",stud);

NSLog会输出您期望的内容,

<STUDENT: 0x518b860> (entity: STUDENT; id: 0x518e0a0 <x-coredata://5A6AC621-11C1-4857-82BF-9BEEF258B171/STUDENT/p10> ; data: {
    name = John;
    number = 1;
    place = USA;
})

我想从其中访问数据的其他视图控制器名为FirstViewController.m/.h/.xib,我对Objective C很新。

2 个答案:

答案 0 :(得分:1)

app委托是一个单独的单一,所以你应该可以从任何视图访问它

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];

从那里你可以调用你想要的任何方法来检索和存储数据..

关于在哪里保持核心数据堆栈可以通过应用程序访问存在各种问题,here就是其中之一。 丹尼尔

答案 1 :(得分:1)

您需要导入appDelegate的标头。您将使用它来访问appDelegate的托管对象上下文。您可以使用该上下文来获取获取所需的信息。您还需要导入实体的类表示的标头。进行提取和插入是一个相同的过程。您可能还需要查看NSFetchedResultsController文档以帮助您使用tableView等。