Swift - 如何将输入数据保存到核心数据中?

Posted

技术标签:

【中文标题】Swift - 如何将输入数据保存到核心数据中?【英文标题】:Swift - How can I save input data into Core Data? 【发布时间】:2016-10-07 02:04:35 【问题描述】:

我正在尝试将用户输入存储到我的核心数据中,但出现错误:

我的代码:

import UIKit
import CoreData

class AddFriendViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource 

    let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

    @IBOutlet weak var fName: UITextField!
    @IBOutlet weak var lName: UITextField!
    @IBOutlet weak var mobile: UITextField!
    @IBOutlet weak var gender: UIPickerView!
    @IBOutlet weak var address: UITextField!
    var pickerDataSource = ["Male", "Female"];
    var genderPick:String = "";

//getting picker data here

    @IBAction func addFriendBtn(sender: AnyObject) 
        let entityDescription = NSEntityDescription.entityForName("Friends", inManagedObjectContext: managedObjectContext)
        let friends = Friends(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext)
        friends.firstName = fName.text!;
        friends.lastName = lName.text!;
        friends.mobile = mobile.text!;
        friends.gender = genderPick;
        friends.address = address.text!;

        var error: NSError?
        managedObjectContext!.save(&error) // error occurs here
        if let err = error 
            showMessage("Error While Adding to Core Data")
         else 
            showMessage("Save to Core Data Successfully")
        
    

    func showMessage(msg: String)
        
            let alert = UIAlertController(title: "Message", message: msg, preferredStyle: UIAlertControllerStyle.Alert)
            alert.addAction(UIAlertAction(title: "Okay", style: UIAlertActionStyle.Default, handler: nil))
            self.presentViewController(alert, animated: true, completion: nil)
    


我在这行代码中遇到错误:managedObjectContext!.save(&error)。错误是“无法强制解开非可选类型'NSManagedObjectContext'的值”

【问题讨论】:

这是编译器错误还是运行时错误? @Bek 编译器错误 【参考方案1】:
var theError: NSError?
do 
     try managedObjectContext!.save()
  catch 

     theError = error 
     print("Unresolved error \(theError), \(theError.userInfo)")

根据Apple Doc,您需要在调用保存功能时添加错误处理代码。

在 Swift 中处理错误:

在 Swift 中,此方法返回 Void 并用 throws 标记 关键字表示在失败的情况下会抛出错误。

您在 try 表达式中调用此方法并处理 do 语句的 catch 子句,如 The Swift 编程语言 (Swift 3) 和使用 Swift 时的错误处理 使用 Cocoa 和 Objective-C (Swift 3)。

【讨论】:

以上是关于Swift - 如何将输入数据保存到核心数据中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 2 中将 UITextField 保存到核心数据?

如何在swift中保存核心数据中的值

保存到多个实体中 - 核心数据 - Swift

如何在 swift 3 中从核心数据中删除对象

尝试从响应 Swift Alamofire 将数据保存到核心数据时崩溃

如何在swift中临时保存用户输入数据?