Я успешно использую метод setValue(value, forKey: key)
в своем подклассе Swift NSObject под NSKeyValueCoding.Использование setValue (значение, forKey: key) в Int? типы запускают метод кодирования, не связанный с ключом
Это прекрасно работает на опциях String, например.
var name:String?
Однако на Int дополнительных опциях, он выходит из строя, вызывая ключевой метод неопределенного, что я переопределен для целей отладки:
override func setValue(value: AnyObject!, forUndefinedKey key: String!) {
println("\(self) this class is not key value coding-compliant for the key \(key)")
}
Так, например, клавиша myId
с хорошим целочисленным значением будет вызвать метод неопределенного ключа выше.
var myId:Int?
Если изменить приведенное выше определение, чтобы быть не опциональным, то все работает отлично:
var myId:Int = 0
С myId
как дополнительный, я попытался абсолютно все, что я могу думать в пути кастинг, развертывание, инициализация и т. д. Он просто не видит класс как ключевое значение, совместимое для этих числовых значений.
Я знаю, что это хорошее числовое значение. Изменение объявления var в String? сбои. Он также прекрасно смотрится в lldb:
Printing description of key:
myId
key NSObject 0x00007fb8d530ca20 0x00007fb8d530ca20
k NSString "myId" 0x00007fa2aa942f20
value __NSCFNumber * Int64(4348129) 0xb000000004258e13
Printing description of value:
4348129
(lldb)
Итак, вопрос, кто-нибудь использовал - в Swift - метод NSKeyValueCoding setValue(value, forKey: key)
на тип Int успешно?
Может быть, это потому, что Int имеет тип Any и не AnyObject. Я попытался разобрать объект на словарь и обратно и имел аналогичные проблемы. См. Https://github.com/evermeer/EVCloudKitDao/blob/master/AppMessage/AppMessage/CloudKit/EVReflection.swift. Вы можете видеть, что я попытался разобрать Any в AnyObject. Недопустимые значения по-прежнему являются проблемой, но она работает на Int. –