У меня есть код, который десериализует некоторый json для объекта. Этот код отлично работает на iPhone 5, iPhone 6 и iPhone 6+.iOS 8 setValuesForKeysWithDictionary не работает на iPhone 5/iPhone 4s
Однако при работе на iPhone 5 или IPhone 4S, я получаю ошибку: [__NSCFString longValue]: unrecognized selector sent to instance
Вот код:
public class Serializable : NSObject
{
func deserialize(dictionary: NSMutableDictionary)
{
/* Remove entries from the dictionary that do not have a corresponding property on the target object.
By default, setValuesForKeysWithDictionary() will cause the app to crash if it encounters the above. */
removeInvalidProperties(self, dictionary: dictionary)
self.setValuesForKeysWithDictionary(dictionary)
}
private func removeInvalidProperties(object: NSObject, dictionary: NSMutableDictionary)
{
for key in dictionary.allKeys {
var exists: Bool = object.respondsToSelector(Selector(key as String))
if !exists {
dictionary.removeObjectForKey(key)
}
}
}
}
Я не могу не заметить, что телефоны, которые работают в этом правильно кодируют 64-битную архитектуру, а те, которые выдают ошибку, 32-разрядные. Я могу только предположить, что это проблема совместимости во время выполнения.
Кто-нибудь знает, что может быть причиной этого, или как обойти его?
Большой вопрос. Я получаю то же самое. Однако на моем сервере я не отправляю двойные кавычки в коде. Такая же база кода, с одного сервера, я получаю значение атрибута в двойных кавычках, а с другого - нет. –