2014-11-09 4 views
1

У меня есть приложение, которое хранит данные с помощью NSKeyedArchiver, и все работает нормально.NSKeyedArchiver меняется с объектаForKey на intForKey

В первой версии приложения значение X хранилось как строка, но теперь я изменил его, чтобы его сохранить и сохранить как int. Проблема в том, что если кто-то обновляется со старой версии до самой новой, приложение вылетает из-за того, что intForKey: вызывается на ключ, содержащий строку.

Есть ли какой-то способ во время декодирования, чтобы проверить, является ли то, что декодируется, int или объект?

+0

ли вы на самом деле вызова 'intForKey:' 'или decodeIntegerForKey:' метод? Можете ли вы опубликовать фрагмент кода, показывающий, как вы это делаете? –

+0

К сожалению, я имел в виду int x = [aDecoder decodeIntForKey: @ "value"]; – halfblood17

ответ

1

NSKeyedArchiver фактически не кодирует примитивные значения. Вместо этого он обертывает их в NSNumber.

Возможно, вы пытались использовать decodeObjectForKey: вместо decodeIntegerForKey:?

В примере,

id xObject = [decoder decodeObjectForKey:@"xObjectKey"]; 
self.x = [xObject integerValue]; 

// I believe this should work because xObject will either by an NSNumber or NSString 
// Both of which respond to the selector integerValue 
+0

Спасибо, я решил его с помощью [NSString intValue]; – halfblood17