好的,一旦代码位var上下文实际发生问题:NSManagedObjectContext = appDel.managedObjectContext运行我评论它确认它是那行,请注意这是我第一次学习iOS编程所以请尝试在答案中尽可能具体,谢谢你:))
import UIKit
import CoreData
class SecondViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var txtName : UITextField
@IBOutlet var txtDesc : UITextField
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {
self.view.endEditing(true)
}
@IBAction func hitAdd(sender : UIButton) {
glTask.newTask(txtName.text, desc: txtDesc.text)
txtName.text = ""
txtDesc.text = ""
self.view.endEditing(true)
self.tabBarController.selectedIndex = 0
var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
就在这里 V
var context: NSManagedObjectContext = appDel.managedObjectContext
按下按钮后会崩溃 ^
代码错误消息 致命错误无法解包Optional.None
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
}
}
答案 0 :(得分:4)
查看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
,那么支持_managedObjectContext
将为零,您将在打开它的行return _managedObjectContext!
要对此进行调试,请深入挖掘堆栈,最有可能无法初始化对象模型或持久存储,从而将nil
返回给您。
修改强>:
在var persistentStoreCoordinator: NSPersistentStoreCoordinator
它们提供了一个位置(评论的墙),你应该调试这个确切类型的问题。
答案 1 :(得分:0)
不确定OP是否曾想过这个问题,但我遇到了类似的问题并意识到我从其他应用程序AppDelegate
复制的代码正在使用该应用程序的项目名称并且我已经忘记了更改此行:let modelURL = NSBundle.mainBundle().URLForResource("CoreData", withExtension: "momd")
使用" CoreData"而不是"测试"它来自另一个项目。