2014-12-12 3 views
2

У меня есть код, который десериализует некоторый 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-разрядные. Я могу только предположить, что это проблема совместимости во время выполнения.

Кто-нибудь знает, что может быть причиной этого, или как обойти его?

+0

Большой вопрос. Я получаю то же самое. Однако на моем сервере я не отправляю двойные кавычки в коде. Такая же база кода, с одного сервера, я получаю значение атрибута в двойных кавычках, а с другого - нет. –

ответ

3

Возможно, возникла одна из проблем, если у вас были ваши свойства, которые были опечалены, когда вы десериализовались из JSON. Я довольно уверен, что 64-битная среда выполнения автоматически преобразует строку в int, но 32-разрядная среда выполнения не будет.

+0

Вот и все. Я получал '" id ":" 1234 "' вместо '" id ": 1234'. Я вручную конвертировал обида, и теперь он работает на всех устройствах. Благодаря! –

Смежные вопросы