2011-01-01 18 views
18

Ich habe eine Reihe von CGPoints von einem CCTMXLayer Ich möchte auf NSUserDefaults speichern, aber ich kann nicht scheinen, eine elegante Weise, dies zu tun.Liste der CGPoints mit NSUserDefaults speichern

Ursprünglich hatte ich gehofft, ein NSDictionary mit einem NSMutableSet für einen Wert zu speichern, der mehrere NSValues ​​(valueWithCGPoint) enthält. Von dem, was ich sagen kann, wird weder NSMutableSet noch NSValue von NSUserDefaults unterstützt.

An diesem Punkt erwäge ich, die x & y-Werte des CGPoint als Zeichenfolge zu speichern und nur es hin und her konvertieren, wie benötigt.

+0

Haben Sie überlegt, nur einen NSKeyedArchiver in eine Datei zu integrieren? (Anstatt NSUserDefaults zu verwenden.) –

Antwort

46

Es gibt ein Paar Funktionen NSStringFromCGPoint und CGPointFromString. Sie können diese verwenden, um ein Array von Strings zu erzeugen, die die Punkte für die Serialisierung darstellen, und dann zurück konvertieren, wenn Sie fertig sind.

+0

Bemerkenswert! Ich hatte keine Ahnung, dass diese Funktionen existierten. Immer neue Facetten von Ziel-c herausfinden. –

1

Box sie in NSValue Objekte. Sobald sie dort sind, können Sie die NSValues auf die Festplatte schreiben (da sie <NSCoding> entsprechen) oder sie in NSUserDefaults oder was auch immer setzen.

+0

Das ist genau mein Problem. Ich versuche, ein NSArray (oder NSSet ... Ich habe beide versucht) von NSValues ​​mit NSUserDefaults zu speichern, aber weiterhin einen Fehler erhalten: [NSUserDefaults setObject: forKey:]: Versuch, Nicht-Eigenschaft Wert –

+0

Property-Listen nicht verwenden . NSValue-Objekte können nicht in plists geschrieben werden. –

+0

Oh duh, Entschuldigung. Ja, Sie müssen einen 'NSKeyedArchiver' verwenden, um' NSValues' in 'NSDatas' (oder' NSArray' in 'NSData' zu konvertieren) –

Verwandte Themen