从app delegate检索managedObjectContext时崩溃

Sam*_*nen 1 cocoa-touch delegates core-data ios ios7

所以当我尝试在我的一个视图控制器中检索我的managedObjectContext时,我收到一个EXC_BAD_ACESS(code = 2 ...)错误.

这是我的getter方法代码:

- (NSManagedObjectContext *) managedObjectContext {
    if (self.managedObjectContext != nil) {
        return self.managedObjectContext;
    }
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        self.managedObjectContext = [[NSManagedObjectContext alloc] init];
        [self.managedObjectContext setPersistentStoreCoordinator: coordinator];
    }

    return self.managedObjectContext;
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试检索managedObjectContext的方法

QVAppDelegate *appDelegate = (QVAppDelegate*)[[UIApplication sharedApplication] delegate];
self.managedObjectContext = appDelegate.managedObjectContext;
Run Code Online (Sandbox Code Playgroud)

以下是appDelegate中的定义

@property (strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
Run Code Online (Sandbox Code Playgroud)

我正在使用ARC并将本教程的代码转换为ARC.

我真的似乎无法解决这个问题.

编辑:这是它崩溃的地方http://i.imgur.com/1yOS7TM.png

Mar*_*rra 5

你似乎在这里有一个无限循环:

- (NSManagedObjectContext *) managedObjectContext {
    if (self.managedObjectContext != nil) {
        return self.managedObjectContext;
    }
Run Code Online (Sandbox Code Playgroud)

self.managedObjectContext转换为[self managedObjectContext]您刚刚输入的方法.所以你一遍又一遍地调用访问者.

您没有正确复制该示例.

其次,你真的应该使用依赖注入而不是像单例一样对待你的App Delegate.我强烈建议研究DI并采用这种设计模式.它会在以后为你节省很多痛苦.

更新1

它在哪里崩溃?什么代码行?它self.managedObjectContext = appDelegate.managedObjectContext;或其他地方?在Xcode中你的断点在哪里?如果在该行的代码发射,而不是内部的的-managedObjectContext方法,那么你有一个问题,您的应用程序委托(这应该是不可能的).

  • __"我可以从方法中删除除返回之外的所有代码,它仍然会崩溃"__ - 如果返回仍然是`return self.managedObjectContext`,那么就像Marcus描述的那样从内部调用方法时遇到同样的问题. (2认同)