18

I have a bunch of CGPoints from a CCTMXLayer I want to save to NSUserDefaults but cannot seem to figure out an elegant way of doing so.

Originally I was hoping to save an NSDictionary with an NSMutableSet for a value containing several NSValues (valueWithCGPoint). From what I can tell neither NSMutableSet or NSValue is supported by NSUserDefaults.

At this point I am considering saving the x&y values of the CGPoint as a string and just converting it back and forth as needed.

Chris Daviduik
  • 336
  • 3
  • 10

2 Answers2

48

There exists a pair of functions NSStringFromCGPoint and CGPointFromString. You can use these to produce an array of strings representing the points for serialization, and then convert back when you're finished.

Lily Ballard
  • 182,031
  • 33
  • 381
  • 347
1

Box them in NSValue objects. Once they're in there, you can write the NSValues out to disk (since they conform to <NSCoding>) or put them in NSUserDefaults or whatever.

Dave DeLong
  • 242,470
  • 58
  • 448
  • 498
  • This is exactly my problem. I am trying to store an NSArray (or NSSet...I have tried both) of NSValues using NSUserDefaults but keep receiving an error: [NSUserDefaults setObject:forKey:]: Attempt to insert non-property value – Chris Daviduik Jan 01 '11 at 22:06
  • Property lists don't use . NSValue objects cannot be written to plists. – Lily Ballard Jan 01 '11 at 22:09
  • Oh duh, sorry. Yes, you'll have to use an `NSKeyedArchiver` to convert the `NSValues` into `NSDatas` (or an `NSArray` into an `NSData`) – Dave DeLong Jan 01 '11 at 22:11