Core data Can';t展开可选。在Swift中使用CoreData时无

Core data Can';t展开可选。在Swift中使用CoreData时无,core-data,swift,Core Data,Swift,好的,所以当代码位var context:NSManagedObjectContext=appDel.managedObjectContext运行时,问题实际上就出现了。我对它进行了注释,以确认它就是那一行,请注意,这是我第一次学习iOS编程,所以请在回答中尽量具体化谢谢:) 就在这里V 一旦按下按钮,应用程序就会崩溃^ 代码错误消息是致命错误无法展开可选。无 }查看Swift中的核心数据堆栈,managedObjectContext的实现方式如下: var managedObjectConte

好的,所以当代码位var context:NSManagedObjectContext=appDel.managedObjectContext运行时,问题实际上就出现了。我对它进行了注释,以确认它就是那一行,请注意,这是我第一次学习iOS编程,所以请在回答中尽量具体化谢谢:)

就在这里V

一旦按下按钮,应用程序就会崩溃^

代码错误消息是致命错误无法展开可选。无


}

查看Swift中的核心数据堆栈,
managedObjectContext
的实现方式如下:

var managedObjectContext: NSManagedObjectContext {
    if !_managedObjectContext {
        let coordinator = self.persistentStoreCoordinator
        if coordinator != nil {
            _managedObjectContext = NSManagedObjectContext()
            _managedObjectContext!.persistentStoreCoordinator = coordinator
        }
    }
    return _managedObjectContext!
}
var _managedObjectContext: NSManagedObjectContext? = nil
正如您所看到的,它由一个可选的

这可能出错的地方是:

  _managedObjectContext = NSManagedObjectContext()
  _managedObjectContext!.persistentStoreCoordinator = coordinator
如果
NSManagedObjectContext()
返回一个
nil
,则支持
\u managedObjectContext
将为nil,并且您将在展开它的行处得到此崩溃
返回

要调试它,请深入堆栈,它很可能无法初始化对象模型或持久存储,从而返回
nil

编辑: 在
var persistentstorecordinator的getter的定义中:nspersistentstorecordinator


它们提供了一个位置(评论墙),您应该在这里调试这类问题。

不确定OP是否解决了这一问题,但我也遇到了类似的问题,意识到我从另一个应用程序的
AppDelegate
复制的代码使用了该应用程序的项目名称,我忘记了更改这一行:
let modelURL=NSBundle.mainBundle().URLForResource(“CoreData”,扩展名为:“momd”)
使用“CoreData”而不是“test”它来自另一个项目。

您确定您的应用程序委托属于
AppDelegate
类型吗?对我来说,它看起来像是
as
强制转换失败并返回一个nil。不太清楚您所说的appDelegate.swift文件是什么意思在创建新项目时由Xcode生成的。我在返回时实际收到一个错误_managedObjectModel!线程1:EXC_BAD_指令(code=EXC_I386_INVOP,子代码0x0)我的问题我该如何解决这个问题?是的,错误在那一点上表现出来,但那是因为一个
nil
在前面的onok中被分配给了_managedObjectModel,那么我应该分配什么呢?一因此,它将在代码的后面一点上期望一个值?var managedObjectModel:NSManagedObjectModel{if!\u managedObjectModel{let modelURL=NSBundle.mainBundle().URLForResource(“核心数据”,带扩展名:“momd”)\u managedObjectModel=NSManagedObjectModel(contentsOfURL:modelURL)}返回{u managedObjectModel!}var{u managedObjectModel:NSManagedObjectModel?=尼利还没有完全弄明白,是的,我确实改变了这句话
    var newTask = NSEntityDescription.insertNewObjectForEntityForName("Tasks", inManagedObjectContext: context) as NSManagedObject
    newTask.setValue("test task", forKey: "myTask")
    newTask.setValue("test Description", forKey: "myDesc")
    context.save(nil)
    //println(newTask)
    println("Task was saved.")

}

// UITextField Delegate
func textFieldShouldReturn(textField: UITextField!) -> Bool {

    textField.resignFirstResponder()
    return true
}
var managedObjectContext: NSManagedObjectContext {
    if !_managedObjectContext {
        let coordinator = self.persistentStoreCoordinator
        if coordinator != nil {
            _managedObjectContext = NSManagedObjectContext()
            _managedObjectContext!.persistentStoreCoordinator = coordinator
        }
    }
    return _managedObjectContext!
}
var _managedObjectContext: NSManagedObjectContext? = nil
  _managedObjectContext = NSManagedObjectContext()
  _managedObjectContext!.persistentStoreCoordinator = coordinator