core-data - 在 Swift 中使用 CoreData 时无法解包 Optional.None

标签 core-data swift

好的所以问题实际上发生在代码位 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

getter 的定义中

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

关于core-data - 在 Swift 中使用 CoreData 时无法解包 Optional.None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24124763/

相关文章:

core-data - 使用 CoreData 进行良好的设计?

core-data - iCloud 和核心数据的 NSPersistentStoreUbiquitousContentNameKey 的唯一性

Swift 运行时文档

ios - 搜索栏显示正确,但按下时错误

ios - 使用 Objective-C 和 Swift 创建内存泄漏

swift - Cocoapods:确定 pod 版本

ios - 在保留 NSManagedObject 的同时保持它的最新状态

ios - 核心数据并发类型未按预期工作

ios - 如何在 iOS6 中的 Core Data 中保存和检索两个数组

swift - 准备转场