2016-06-20 11 views
2

ÜbersichtSpeicher eine ganze Zahl im Kerndaten

ich mehrere Textfelder in Coredata, aber nur die ersten (gesehen als picker unten) speichern und druckt richtig sparen müssen. Die anderen werden nicht korrekt gespeichert, zum Beispiel wenn ich versuche, die ganzzahligen zu speichern, bekomme ich eine Fehlermeldung, dass sie keinen String nehmen können, was Sinn macht. Ich kann einfach keinen Weg finden, das Integer-String-Problem zu beheben. Der andere Fehler tritt auf, wenn ich versuchte, alles als String zu interpretieren (hauptsächlich, weil ich keine Arithmetik darauf anwenden muss, also spielt es keine Rolle), und es gibt mir nur einen Bruchpunkt in der saveButton-Funktion.

Was Ich mag möchte wissen

Was ich letztlich brauchen, ist die Fähigkeit, alle diese Textfeldern in Coredata zu speichern, damit ich sie später abrufen können. Ich schätze die Hilfe im Voraus. Vielen Dank!

HINWEIS

ich die gesamte bin auch (oder die meisten) die ViewController.swift Datei, so dass Sie sehen können, wie ich die Dinge bin erklärt und dann, wie sie genannt werden. Der betreffende Code befindet sich in der Aktion saveButton am unteren Rand des Codeblocks.

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") 
    } 


} 

EDIT

Beim Versuch, alles nur als eine Zeichenfolge zu speichern, da ich es nur abrufen müssen, ich laufe in dieser Ausgabe:

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")) 

Ich bekomme auch "(lldb)" im Debugger-Fenster.

Antwort

0

Für Dinge, die keine Arithmetik benötigen, definieren Sie sie als Zeichenketten in Core Data. Für andere Nummern sollte es funktionieren wie Sie es mit Int(YOM.text!) machen.

Allerdings schlage ich vor, dass Sie eine verwaltete Objektunterklasse für „UsedInfo“ erstellen , so dass Sie direkt mit seinen Eigenschaften arbeiten, anstatt setValue:forKey: zu verwenden. Der Vorteil einer Unterklasse ist, dass sie Datentypen explizit anzeigt.

+0

Danke! Nochmal, riesiges noob hier, aber was genau ist eine Objektunterklasse? – gavsta707

+0

Wenn Sie mit Ihrem Kerndatenmodell arbeiten, verfügt das Xcode-Editor-Menü über die Option "Create NSManagedObject Subclass ...". Damit können Sie spezifische Klassen erstellen, die zu Ihrem Design passen, anstatt sich immer mit generischen 'NSManagedObject'-Typen zu befassen. –

+0

Danke! Ich werde das untersuchen – gavsta707

0

Ich zeige Ihnen nur, wie Sie Int von String erhalten. Verwenden Sie es entsprechend:

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

Sie das Textfeld zu aString zuweisen können und wandeln es in Int wie ich Ihnen gezeigt habe.

+0

Danke! Jetzt bin ich halb da! Ich schätze die schnelle Antwort auf die Noob-Frage. – gavsta707

+0

Überprüfen Sie meine bearbeitete Antwort, um den textField-Text direkt einer Variablen zuzuweisen und sie in Int zu konvertieren. Glückliche Kodierung! :) – Dershowitz123

0

Überprüfen Sie alle Textfelder, bevor Sie speichern, legen Sie die entsprechende Tastatur für jedes Textfeld fest und geben Sie den gültigen Zeichensatz für jedes Textfeld an.

Beispiel:

YOM Textfeld: Verwenden Sie Tastatur mit nur ganzen Zahlen.

Gültige Zeichensatz sind 0 bis 9

und Validierung für min und max falls zutreffend.

Wenn eines der Validierungskriterien fehlschlägt, einen Alarm auslösen, um gültige Daten einzugeben.

Ich denke, das löst Ihr Problem.

Verwandte Themen