1

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 は正常に動作していることに注意してください。

4

1 に答える 1

1

私はあなたほど遠くまで行きませんでした。次の 2 行だけでクラッシュしました。

let loc = CLLocationCoordinate2D(latitude: 20, longitude: 20)
let val = NSValue(MKCoordinate:loc)

これは、それNSValue(MKCoordinate:)が壊れていることを示しています。これは Swift の問題ではありません。Objective-C に変換された同じコードを使用すると、同じクラッシュが発生します。

于 2015-06-18T23:39:00.653 に答える