NSManagedObject错误 [英] NSManagedObject Error

查看:159
本文介绍了NSManagedObject错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我现在开始在iOS上学习核心数据。在下面的代码行中,我目前遇到致命错误:意外找到nil,同时解封一个可选值。我一直在下面的YouTube和少数其他地方的讲座,并看看他们的代码,但不知道这个错误背后的原因。如果有人可以提供给我一个概述,将是真的有用的。目前在我的代码中,我只是从实体分配值,无法提取。

I have started learning core data in iOS now. I am currently getting fatal error: unexpectedly found nil while unwrapping an Optional value on the line of code below. I have been following lectures on youtube and few other places and had a look at their code too but failed to know the reason behind this error. If someone could provide me with an overview of it will be really helpful. Currently in my code I am just assigning values from entity, no fetching.

应用程式代表

lazy var applicationDocumentsDirectory: NSURL = {
    // The directory the application uses to store the Core Data store file. This code uses a directory named "com.alakh.singh.okejhbs" in the application's documents Application Support directory.
    let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
    return urls[urls.count-1]
}()

lazy var managedObjectModel: NSManagedObjectModel = {
    // The managed object model for the application. This property is not optional. It is a fatal error for the application not to be able to find and load its model.
    let modelURL = NSBundle.mainBundle().URLForResource("ActivityMonitor", withExtension: "momd")!
    return NSManagedObjectModel(contentsOfURL: modelURL)!
}()

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
    // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.
    // Create the coordinator and store
    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("SingleViewCoreData.sqlite")
    var failureReason = "There was an error creating or loading the application's saved data."
    do {
        try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil)
    } catch {
        // Report any error we got.
        var dict = [String: AnyObject]()
        dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
        dict[NSLocalizedFailureReasonErrorKey] = failureReason

        dict[NSUnderlyingErrorKey] = error as NSError
        let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
        // Replace this with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
        NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
        abort()
    }

    return coordinator
}()

lazy var managedObjectContext: NSManagedObjectContext = {
    // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is optional since there are legitimate error conditions that could cause the creation of the context to fail.
    let coordinator = self.persistentStoreCoordinator
    var managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
    managedObjectContext.persistentStoreCoordinator = coordinator
    return managedObjectContext
}()

// MARK: - Core Data Saving support

func saveContext () {
    if managedObjectContext.hasChanges {
        do {
            try managedObjectContext.save()
        } catch {
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            let nserror = error as NSError
            NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
            abort()
        }
    }
}

}

ViewController: / strong>

ViewController:

    @IBAction func cofirmLogin(sender: UIButton) {
    let oct = ((UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext)
    var userNameValue = NSEntityDescription.insertNewObjectForEntityForName("LoginInformation", inManagedObjectContext: oct!) as! LoginInformation
    userNameValue.loginUserName = loginUserName.text!
    userNameValue.loginPin =  Int(loginPin.text!)!

    userNameValue = loginInfo
    saveContext(oct!)
}

func saveContext (context : NSManagedObjectContext) {
    if context.hasChanges {
        do {
            try context.save()
        } catch {
            let nserror = error as NSError
            NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
        }
    }
}
}


推荐答案

也许某些东西不能正常工作,使用lazy变量。你可以像这样重构你的托管对象上下文。

Maybe something is not working as expected with the lazy variable. You could refactor your managed object context like this.

var managedObjectContext: NSManagedObjectContext {
    get {

        if _managedObjectContext == nil {
            let coordinator = self.persistentStoreCoordinator
            let moc = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
            moc.persistentStoreCoordinator = coordinator
            _managedObjectContext = moc
        }
        return _managedObjectContext!
    }
}
var _rootContext: NSManagedObjectContext?

此外,请确保应用程序代理按预期返回签入调试器)。

Also, make sure that the app delegate is returned as expected (perhaps break this up into several lines and check in the debugger).

这篇关于NSManagedObject错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆