使用NSUserDefaults保存CGPoint列表

18

我有一堆来自CCTMXLayer的CGPoints,想将它们保存到NSUserDefaults中,但似乎找不到优雅的方法。

最初,我希望保存一个NSDictionary,其中包含一个NSMutableSet作为值,该值包含几个NSValues(valueWithCGPoint)。据我所知,NSUserDefaults都不支持NSMutableSet或NSValue。

此时,我考虑将CGPoint的x和y值保存为字符串,并根据需要进行转换。


你考虑过直接使用NSKeyedArchiver将数据存储到文件中吗?(而不是使用NSUserDefaults。) - John Parker
2个回答

48

有一对函数NSStringFromCGPointCGPointFromString。您可以使用它们生成表示点的字符串数组进行序列化,然后在完成时将其转换回来。


太棒了!我从来不知道这些函数的存在。总是发现 Objective-C 的新面貌。 - Chris Daviduik

1

将它们装进NSValue对象中。一旦它们在里面,你就可以将这些NSValues写入磁盘(因为它们符合<NSCoding>),或者将它们放入NSUserDefaults或其他地方。


这正是我的问题。我试图使用NSUserDefaults存储一个包含NSValues的NSArray(或NSSet...我尝试了两种方式),但一直收到错误消息:[NSUserDefaults setObject:forKey:]:尝试插入非属性值。 - Chris Daviduik
属性列表不使用<NSCoding>。NSValue对象无法写入属性列表。 - Lily Ballard
哦,抱歉。是的,您将需要使用NSKeyedArchiverNSValues转换为NSDatas(或将NSArray转换为NSData)。 - Dave DeLong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接