使用应用更新更改存储在NSUserDefault中的数据类型

时间:2014-12-15 09:04:03

标签: ios objective-c decode

我使用NSUserDefaults保存了我的应用程序中保存的一些数据,例如某些具有NSNumber属性的对象。

@interface STAccountInfo : NSObject

@property(nonatomic,strong)NSNumber* is_new_device_verification_enabled;
@property(nonatomic,strong)NSNumber* is_new_device_verification_enabled_by_enterprise;
@property(nonatomic,strong)NSNumber* is_collab_related_function_restricted;

self.is_new_device_verification_enabled = [decoder decodeNumberForKey:@"is_new_device_verification_enabled"];;

但我的新版本需要将某些NSNumber属性更新为bool类型。

@interface STAccountInfo : NSObject

@property(nonatomic,assign)BOOL is_new_device_verification_enabled;
@property(nonatomic,assign)BOOL is_new_device_verification_enabled_by_enterprise;
@property(nonatomic,assign)BOOL is_collab_related_function_restricted;
如果我尝试解码存储的对象,应用程序将因错误的数据类型而引发异常。我应该在解码器部分做什么?

这是当前的解码代码:

self.is_new_device_verification_enabled = [decoder decodeBoolForKey:@"is_new_device_verification_enabled"];

1 个答案:

答案 0 :(得分:1)

我建议您为新用户默认值使用新的密钥名称,然后在启动时使用:

  1. 检查是否存在旧密钥 - 如果它们不存在则继续照常进行。
  2. 如果它们存在,请将旧密钥值迁移到新密钥(例如,将“1”更改为“是”)
  3. 删除旧密钥的值