Ich schreibe eine Anwendung mit Core Data, die stark davon abhängt, Attribute aus String-Werten zu setzen. Ich stoße jedoch auf ein Problem, da Core Data beim Erstellen von Wrapper-Methoden NSNumber verwendet, um alle numerischen Felder darzustellen. Daher, wenn ich eine Zeichenfolge mit Schlüssel/Wert-Codierung übergeben SetValue: forKey: Es gibt mir einen Typ Fehler:Key-Value Type Coercion unter iOS
Zum Beispiel habe ich einen Objekttyp "Gebäude". Im Datenmodell, ich habe ein Attribut "fbFloors" auf integer 32.
Dann in meinem Code genannt, ich folgendes tun:
Gebäude * b = [NSEntityDescription insertNewObjectForEntityForName: @ "Gebäude" inManagedObjectContext: ctx]; [b setValue: @ "2" forKey: @ "fbFloors"];
Dies wirft die folgende Ausnahme:
App beenden aufgrund nicht abgefangene Ausnahme ‚NSInvalidArgumentException‘ Grund: ‚Unzulässige Art des Wertes für das Attribut: property =‚fbFloors‘; gewünschter Typ = NSNummer; gegebener Typ = __NSCFConstantString; Wert = 2. '
Ich möchte es den String-Wert zu einer Zahl zwingen, aber es will nicht. Ich habe versucht, coerceValueForFbFloors zu implementieren: aber es scheint, dass das nur in Mac OS X, nicht in iOS verfügbar ist.
Irgendwelche Ideen?
Der Grund, warum ich das vermeiden wollte, ist, weil ich gehofft habe, direkte Codierung vermeiden zu können. Es gibt viele Felder mit einer Vielzahl von Typen, aber alle kommen über einen Text-Feed herein, also hoffte ich, dass KVC in der Lage sein würde, die Typen zu erzwingen, ohne dass ich manuell codieren musste, was mit jedem Feld passiert. Ich habe darüber nachgedacht, ein Feld namens "fbFloorsString" hinzuzufügen, das die Konvertierung für mich übernimmt, aber ich habe auf eine automatische Art gehofft. – johnnyb