Ich versuche, Breite / Länge in Kerndaten zu speichern. Diese enden mit einer Genauigkeit von 6-20 Ziffern.
Und aus welchem Grund auch immer, ich hatte sie in den Core Data als Floats, rundete sie ab und gab mir nicht die genauen Werte zurück. Ich habe versucht "Dezimal" -Typ, mit keinem Glück auch nicht.
Sind NSStrings meine einzige andere Option?
BEARBEITEN
NSManagedObject:
%Vor%Hier ist der Code für eine Beispielnummer, die ich in Kerndaten speichern kann:
%Vor%Der obige Wert wird gedruckt. Süß, Wert, den ich erwartet habe:
%Vor%Code, um wieder darauf zuzugreifen:
%Vor%Druckwerte:
%Vor%Haben Sie den NSNumber-Wrapper verwendet?
Konfigurieren Sie Ihr Geschäft für die Verwendung von NSNumber statt Float oder Dezimal, und verwenden Sie dies, um die Koordinaten zu speichern:
%Vor% Wenn Core Data Daten in SQLite speichert, werden numerische Spalten verwendet. SQLite speichert Zahlen als höchstens 8-Byte-Werte, unabhängig davon, ob es sich um Integer- oder Gleitkomma-Werte handelt. Während also ein NSDecimalNumber
ziemlich glücklich wäre, diese Koordinatenwerte genau darzustellen, wird ein Umlauf durch ein Core Data-Dezimalattribut, das von SQLite unterstützt wird, durch ein Stupsen ausgelöst.
Da Koordinatenbereiche wohldefiniert sind, können Sie einige Stellen mit Genauigkeit (im Vergleich zu double) hinzufügen, indem Sie eine 64-Bit-int-Darstellung (oder sogar mehrere) verwenden.
in der Realität, Ihre Quellen und Ziele möglicherweise nicht verwenden oder bieten so viel Genauigkeit, so ... es kann nicht viel zu gewinnen.
Ich glaube, das Trunkierungsproblem könnte bei der Protokollierung auftreten, nicht bei den eigentlichen Daten, die in Core Data gespeichert sind.
Können Sie das bestätigen, indem Sie den Code, mit dem Sie die Ausgabe protokollieren, hochladen?
Ich sage das, weil ich bemerkt habe, dass bei der Protokollierung einiger meiner längeren NSString-Felder in der Core Data-Beschreibung nur etwa 50 Zeichen angezeigt werden, was zu der Annahme führen könnte, dass die Daten abgeschnitten werden die Beschreibung davon.
Stellen Sie in Ihrem Datenmodell-Editor sicher, dass die Typen für Ihre Breiten- / Längenfelder auf double
festgelegt sind. Andernfalls führt CoreData die Konvertierung für Sie durch, und das Ergebnis ist nicht das, was Sie erwarten (in diesem Fall werden die Dezimalstellen fallen gelassen).
empfehle dringend, NSDecialNumber zum Speichern zu verwenden, wenn Sie einen genauen Wert benötigen oder in Ihrem Code vergleichen möchten. Sie haben möglicherweise einen anderen Wert nach dem Speichern und erhalten den Wert aus den Kerndaten in doppelten Feldern zurück.
Tags und Links iphone ios core-location