Speichern von hochgenauen Breiten- und Längenzahlen in iOS Core Data

8

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%     
Bryan 03.01.2011, 14:39
quelle

7 Antworten

10

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%     
Evan Mulawski 03.01.2011 14:47
quelle
1

Versuchen Sie, den Datentyp Double in Core Data zu verwenden. Da Ihre Standortkoordinaten Doppelwerte sind, ist es sinnvoll, dieselben in Core Data zu verwenden. Obwohl das gerade jetzt verfügbar sein kann (iOS 5).

    
Stephen C 09.03.2012 02:54
quelle
1

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.

    
Sixten Otto 02.02.2013 06:18
quelle
0

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.

    
justin 03.01.2011 20:48
quelle
0

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.

    
lkraider 27.06.2011 02:07
quelle
0

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

    
Macondo2Seattle 14.02.2012 00:12
quelle
0

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.

    
Jerry Juang 21.03.2014 13:22
quelle

Tags und Links