执行fetchRequest时获取SIGABRT



我使用的是Xcode 4.2和iOS SDK 5.0以及Apple的Master Detail Application Template for iPad with Core Data。它类似于"位置"示例代码。我已经成功地将托管对象上下文(MOC)从MasterViewController(MVC)传递到DetailViewController(DVC)。局部视图控制器在一些文本框中接受来自用户的输入,并将其存储在核心数据中;这部分很有魅力。现在,我有一个ActionViewController(AVC),它是一个Popover视图,如果用户选择的话,它应该允许用户通过电子邮件发送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/fly_punnett

所以我想明白了,尽管我可能打破了一些"好编程"的准则。。。

我所做的只是删除

//Pass the MOC to the actionViewController
_actionViewController.managedObjectContext = self.managedObjectContext;

以及从AVC到MVC的所有其他连接(即MCV接口中的@class ActionViewController、@property*ActionViewController)<lt;如果你想要,请问我完整的细节,或者在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创建成功,我可以为用户获取数据,并将其放入电子邮件中,他们可以发送给任何人。

最新更新