NSKeyedArchiver 和 NSValue - 如何存档?
Posted
技术标签:
【中文标题】NSKeyedArchiver 和 NSValue - 如何存档?【英文标题】:NSKeyedArchiver and NSValue - How to Archive? 【发布时间】:2010-04-24 20:09:25 【问题描述】:如何归档 NSValues 数组?我应该进行哪些转换才能做到这一点?它不会按原样存档。
代码:
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver
archivedDataWithRootObject:[[NSArray alloc] initWithArray:drawingsArray]]
forKey:@"NSValuesArray"];
错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSKeyedArchiver encodeValueOfObjCType:at:]: this archiver cannot encode structs'
数组数据:
drawingsArray (
(
NSPoint: 439, 280,
NSPoint: 439, 280,
NSPoint: 439, 287,
NSPoint: 438.62, 290.104,
NSPoint: 439, 293
)
)
【问题讨论】:
根据文档,NSValue
实现了NSCoding
协议,所以它应该可以正常工作。你遇到了什么问题?
代码我已经贴出来了,请看上面。
【参考方案1】:
您不需要使用NSKeyedArchiver
。相反,只需说[[NSUserDefaults standardUserDefaults] setObject:valueArray forKey:@"valueArray"]
。归档将自动完成。看看这是否有效。
编辑:我认为您的具体问题是使用archivedDataWithRootObject:
。你不需要使用它,因为NSArray
符合NSCoder
——子对象也将被自动归档。
【讨论】:
我也有这个问题。 NSPoint 是一个结构体,NSKeyedArchiver 不能编码结构体。以上是关于NSKeyedArchiver 和 NSValue - 如何存档?的主要内容,如果未能解决你的问题,请参考以下文章
Object - C 值对象 NSNumber和NSValue