【发布时间】:2015-06-18 23:01:03
【问题描述】:
NSValue 不是 NSObject 吗?那我为什么会崩溃
var coordinatesRawData = NSValue(MKCoordinate: coordinates.first!)
if coordinatesRawData != nil {
// Crashing here. I have a valid NSValue object
aCoder.encodeObject(coordinatesRawData, forKey: "coordinatesRawData")
}
错误日志
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSKeyedArchiver encodeValueOfObjCType:at:]: this archiver cannot encode structs'
但如果我这样做
var coordinatesRawData = NSValue()
aCoder.encodeObject(coordinatesRawData, forKey: "coordinatesRawData")
没有崩溃 - 两者都是 NSValues .. 对吗?
注意,我所有的其他 NSCoding / Decoding 工作正常。
【问题讨论】:
-
我相信这是因为键控存档器无法获取结构条目的键。另一种选择是您使用可能对您有用的 NSArchiver,但会降低灵活性。或者不要使用结构并存储单独的字段或创建自己的支持 NSCoding 的对象。
-
我认为 NSValue 就像一个 Wrapper,我可以把这个 Struct 扔进去,变成金色的。猜不出来,我有一个解决办法,但这会更干净。
-
在我看来 NSValue(MKCoordinate:) 坏了。您应该就此提交错误报告。
-
这是我在短时间内发现的第二个错误。 stackoverflow.com/questions/30158193/… 我同意它一定是一个错误。
标签: ios swift nscoding nsvalue