【问题标题】:Getting SIGABRT when executing fetchRequest执行 fetchRequest 时获取 SIGABRT
【发布时间】:2012-03-21 08:46:21
【问题描述】:

我正在使用 Xcode 4.2 和 iOS SDK 5.0 以及 Apple 的带有核心数据的 iPad 主从应用程序模板。它类似于“位置”示例代码。我已经成功地将托管对象上下文 (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
}

另外,在调试器中,我看到 *context 指针是 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

【问题讨论】:

    标签: ios5 xcode4 uiviewcontroller nsmanagedobjectcontext nsfetchrequest


    【解决方案1】:

    所以我想通了,虽然我可能打破了一些“好的编程”格言......

    我所做的只是删除

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

    以及从 AVC 到 MVC 的所有其他连接(即 MCV 界面中的 @class ActionViewController、@property *ActionViewController)

    然后我就加了

    #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 已成功创建,我可以为用户获取数据并将其放入电子邮件中,他们可以发送给任何人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 2019-01-27
      • 2012-04-29
      相关资源
      最近更新 更多