Быстрое NSC-кодирование с 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 / Decoding работают нормально.

1 ответ

Решение

Я даже не зашел так далеко, как ты. Я разбился только на этих двух строках:

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

Это говорит мне, что NSValue(MKCoordinate:) сломано. И это не проблема Свифта; Я получаю тот же сбой, используя тот же код, переведенный в Objective-C.

Другие вопросы по тегам