好的所以问题实际上发生在代码位 var context: 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)
Right here V
var context: NSManagedObjectContext = appDel.managedObjectContext
This crashes the app once button is pressed ^
The code error message is fatal error Cant unwrap 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
}
最佳答案
查看Swift中的Core Data栈,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
将为 nil,您将在您所在的行发生此崩溃打开它return _managedObjectContext!
要对此进行调试,请深入了解堆栈,它很可能无法初始化对象模型或持久存储,因此返回 nil
给您。
编辑:
在 var persistentStoreCoordinator: NSPersistentStoreCoordinator
它们提供了一个位置(评论墙),您应该在其中调试此类问题。
关于core-data - 在 Swift 中使用 CoreData 时无法解包 Optional.None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24124763/