我刚刚被烧毁了,因为我的 iOS 应用程序的更新在 App Store 上上线了,不幸的是,由于我的代码使用方式中的错误,它在使用新功能时崩溃了NSUserDefaults
。我的应用使用registerDefaults
,但新功能尝试写入升级后不存在的密钥。如果从头开始安装它可以正常工作,因为密钥是由registerDefaults
.
具体来说,我的应用程序使用嵌套字典,因此在更新之前,首选项文件具有以下结构:
<dict>
<key>Alpha</key>
<dict>
<key>Key</key>
<string>Value</string>
</dict>
<key>Beta</key>
<dict>
<key>Key</key>
<string>Value</string>
</dict>
<key>Charlie</key>
<dict>
<key>Key</key>
<string>Value</string>
</dict>
</dict>
——更新后,需要密钥Delta:
<dict>
<key>Alpha</key>
<dict>
<key>Key</key>
<string>Value</string>
</dict>
<key>Beta</key>
<dict>
<key>Key</key>
<string>Value</string>
</dict>
<key>Charlie</key>
<dict>
<key>Key</key>
<string>Value</string>
</dict>
<key>Delta</key>
<dict>
<key>Key</key>
<string>Value</string>
</dict>
</dict>
当我的代码尝试从用户默认值中检索Delta的字典以便向其中写入一些键和值时,它发生了故障。对于这种情况,字典是nil
因为更新后它不在首选项文件中。
处理这种情况的最佳实践方法是什么?我是否应该在尝试写入并在需要时创建它之前简单地检查一下 Delta 的字典是否存在,或者是否有更少的皮带和大括号方法?nil