在核心数据中保存整数

时间:2016-06-20 13:18:12

标签: ios xcode swift core-data textfield

概述

我需要将几个TextFields保存到CoreData中,但只有第一个(如下面的pickerView所示)保存并正确打印。其他人没有正确保存,例如,当我尝试保存整数,我得到一个错误,说他们不能采取字符串,这是有道理的。我只是找不到修复整数字符串问题的方法。当我试图将所有内容都作为字符串进行转换时会出现另一个错误(主要是因为我不需要对它进行任何算术,因此无关紧要),它只是在saveButton函数中给出了一个突破点。 / p>

我想知道什么

我最终需要的是能够将所有这些TextField保存到CoreData中,以便以后可以检索它们。我提前感谢你的帮助。谢谢!

注意

我包含整个(或大部分)ViewController.swift文件,以便您可以看到我如何声明事物以及如何调用它们。有问题的代码位于代码块底部的saveButton操作中。

CODE

@IBOutlet weak var locationOfMachine: UITextField!
@IBOutlet weak var engineHours: UITextField!
@IBOutlet weak var YOM: UITextField!
@IBOutlet weak var serialNo: UITextField!
@IBOutlet weak var modelName: UITextField!
@IBOutlet weak var pickerTextField: UITextField!
var pickOption = ["Wirtgen","Kleeman","Hamm","Vögele"]
   override func viewDidLoad() {
    super.viewDidLoad()
    var pickerView = UIPickerView()
    pickerView.delegate = self


    pickerTextField.inputView = pickerView
    // 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.
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}




@IBAction func saveButton(sender: AnyObject)
{
    var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
    var context:NSManagedObjectContext = appDel.managedObjectContext

    var entity1 = NSEntityDescription.insertNewObjectForEntityForName("UsedInfo", inManagedObjectContext:context) as NSManagedObject
    entity1.setValue(pickerTextField.text, forKey: "product")
    entity1.setValue(modelName.text, forKey:"modelName")
    entity1.setValue(serialNo.text, forKey:"serialNo")
    entity1.setValue(Int(YOM.text!), forKey:"yom")
    entity1.setValue(engineHours.text, forKey:"engineHours")
    entity1.setValue(locationOfMachine.text, forKey:"location")
    print(entity1.valueForKey("product"))
    print(entity1.valueForKey("modelName"))
    print(entity1.valueForKey("serialNo"))
    print(entity1.valueForKey("yom"))
    print(entity1.valueForKey("engineHours"))


    do {
        try context.save()
    }
    catch {
        print("error")
    }


}

修改

在尝试将所有内容保存为字符串时,由于我只需要检索它,我遇到了这个问题:

    entity1.setValue(pickerTextField.text, forKey: "product")
    entity1.setValue(modelName.text, forKey:"modelName")
    entity1.setValue(serialNo.text, forKey:"serialNo") <-Thread1:Breakpoint1.1
    entity1.setValue(YOM.text, forKey:"yom")
    entity1.setValue(engineHours.text, forKey:"engineHours")
    entity1.setValue(locationOfMachine.text, forKey:"location")
    print(entity1.valueForKey("product"))
    print(entity1.valueForKey("modelName"))
    print(entity1.valueForKey("serialNo"))
    print(entity1.valueForKey("yom"))
    print(entity1.valueForKey("engineHours"))

我也在调试器窗口中得到“(lldb)”。

3 个答案:

答案 0 :(得分:0)

我将向您展示如何从字符串中获取int。相应地使用它:

var aString = "0000" // var aString = textField.text!
var numFromString = Int(aString)

您可以将文本字段分配给aString并将其转换为Int,就像我向您展示的那样。

答案 1 :(得分:0)

对于不需要算术的事物,在Core Data中将它们定义为字符串。对于其他数字,它应该像Int(YOM.text!)一样工作。

但是,我建议您为&#34; UsedInfo&#34;创建一个托管对象子类。这样您就可以直接使用其属性而不是使用setValue:forKey:。子类的好处是它将显式地显示数据类型。

答案 2 :(得分:0)

在尝试存储之前验证所有文本字段,为每个文本字段设置适当的键盘,并为每个文本字段提供有效的字符集。

例如:

YOM文本字段:仅使用整数键盘。

有效字符集为0到9

如果适用,验证最小值和最大值。

如果任何验证标准失败,则抛出警报以输入有效数据。

我想这可以解决你的问题。