我试图对MKMapView
中心进行编码,然后跨入一个NSKeyedArchiver
状态保存。我发现了几个方便的新MapKitNSValue
附加项,valueWithMKCoordinate:
和valueWithMKCoordinate:
。尝试将它们编码到密钥存档器中失败:
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
NSValue *mapCenterValue = [NSValue valueWithMKCoordinate:mapView.centerCoordinate];
NSValue *mapSpanValue = [NSValue valueWithMKCoordinateSpan:mapView.region.span];
[coder encodeObject:mapCenterValue forKey:kMapCenter];
[coder encodeObject:mapSpanValue forKey:kMapSpan];
}
由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“-[-NSKeyedArchiver encodeValueOfObjCType:at:]:此存档器无法编码结构”
我知道解决此问题的方法是将单个双精度编码为四个单独的键。
我的问题是为什么会这样。AnNSValue
是一个对象,所以为什么告诉我“此存档器无法编码结构”
根据该NSKeyedArchiver
课程的文档,
密钥归档文件与非密钥归档文件的不同之处在于,编码给该归档文件的所有对象和值都被赋予了名称或键。
为了存档a的元素struct
并为其提供密钥,NSKeyedArchiver
需要元数据来知道a的每个字段struct
位于何处以及这些字段的名称是什么。该@encode
存储与NSValue
给它约的布局足够的信息struct
,但对每个字段的名称的信息丢失。
由于没有有关中的字段名称的元数据struct
,因此无法以确保正确取消归档的方式归档数据。这就是为什么NSKeyedArchiver
必须拒绝NSValue
使用嵌入式C归档的原因struct
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句