当我尝试在我的一个视图控制器中检索我的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;
}
这是我尝试检索managedObjectContext
的方法QVAppDelegate *appDelegate = (QVAppDelegate*)[[UIApplication sharedApplication] delegate];
self.managedObjectContext = appDelegate.managedObjectContext;
以下是appDelegate
中的定义@property (strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
我正在使用ARC并将此tutorial's代码转换为ARC。
我似乎无法解决这个问题。
的地方答案 0 :(得分:5)
你似乎在这里有一个无限循环:
- (NSManagedObjectContext *) managedObjectContext {
if (self.managedObjectContext != nil) {
return self.managedObjectContext;
}
self.managedObjectContext
会转换为[self managedObjectContext]
,这是您刚输入的方法。所以你一遍又一遍地调用访问者。
您没有正确复制该示例。
其次,你真的应该使用依赖注入而不是像单身一样对待你的App Delegate。我强烈建议研究DI并采用这种设计模式。它会在以后为你节省很多痛苦。
它在哪里崩溃?什么代码行?是self.managedObjectContext = appDelegate.managedObjectContext;
还是其他地方?在Xcode中你的断点在哪里?如果它在{0}}方法的代码行而不是在内部触发,那么您的App Delegate就会出现问题(这是不可能的)。
答案 1 :(得分:0)
要查找崩溃类型,只需将此代码添加到AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
NSSetUncaughtExceptionHandler { exception in
print("This is exception here ",exception)
print(exception.callStackSymbols)
}
return true
}