Swift NSCoding 与 NSValue
Swift NSCoding with NSValue
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 / 解码都工作正常。
我什至没有你做的那么远。我只在这两行崩溃了:
let loc = CLLocationCoordinate2D(latitude: 20, longitude: 20)
let val = NSValue(MKCoordinate:loc)
这告诉我 NSValue(MKCoordinate:)
坏了。这不是 Swift 问题;我使用翻译成 Objective-C.
的相同代码遇到了同样的崩溃
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 / 解码都工作正常。
我什至没有你做的那么远。我只在这两行崩溃了:
let loc = CLLocationCoordinate2D(latitude: 20, longitude: 20)
let val = NSValue(MKCoordinate:loc)
这告诉我 NSValue(MKCoordinate:)
坏了。这不是 Swift 问题;我使用翻译成 Objective-C.