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