我使用Xcode 4.2和iOS SDK 5.0以及带有核心数据的Apple的Master-Detail应用程序模板。它与" Locations"相似。示例代码。我已经成功地将托管对象上下文(MOC)从MasterViewController(MVC)传递给DetailViewController(DVC)。详细视图控制器在一些文本框中接受来自用户的输入并将其存储在核心数据中;这部分就像一个魅力。现在,我有一个ActionViewController(AVC)是一个Popover View,它应该允许用户通过电子邮件发送MOC中的所有数据(如果他们选择的话)。但是,当尝试进行提取时,我得到一个SIGABRT。我使用断点来确切地指出:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Fetch the crosses
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event"
inManagedObjectContext:context];
[fetchRequest setEntity:entity]; // Where it crashes
//Other code }
另外,在调试器中我看到*上下文指针是0x0,我猜测它意味着它不存在?
我让MVC通过MOC的方式是这样的:
// Pass the managedObjectContext to the DetailViewController as a property
_detailViewController.managedObjectContext = self.managedObjectContext;
//Pass the MOC to the actionViewController
_actionViewController.managedObjectContext = self.managedObjectContext;
我已经查看了其他帖子,似乎将MOC传递给AppDelegate的所有视图控制器可能是要走的路,但我想找出为什么数据输入适用于DVC但是崩溃了在AVC中获取数据。我犯了什么重大错误?
顺便说一下,如果你想查看它,我把整个项目放在github上:https://github.com/scottdaniel/FlyPunnett/tree/coreDataWork
P.S。没关系,你可以叫我一个菜鸟CocoaTouch程序员,我对R
更好答案 0 :(得分:0)
所以我想出来了,虽然我可能打破了一些“好的编程”格言......
我所做的只是删除
//Pass the MOC to the actionViewController
_actionViewController.managedObjectContext = self.managedObjectContext;
以及从AVC到MVC的所有其他连接(即@class ActionViewController,MCV界面中的@property * ActionViewController)<<如果您需要,请向我询问详细信息,或者在github上查看(上面的链接)
然后我添加了
#import AppDelegate.h
到我的ActionViewController.m
并修改了MOC创建:
-(void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Fetch the crosses
NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication
sharedApplication] delegate]
managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Event"
inManagedObjectContext:context];
MOC已成功创建,我可以为用户提取数据并将其放入可以发送给任何人的电子邮件中。