【问题标题】:iOS App Update and User DefaultsiOS 应用更新和用户默认设置
【发布时间】:2017-12-14 23:02:29
【问题描述】:

我开发了一款游戏,并在大约 2 个月前将其发布到 App Store(超自然杀手)。游戏使用用户默认值来存储玩家等级、经验、金币等数据。

我想更新游戏以包含我根据 swift 黑客的帮助编写的评论请求。 (我还不得不切换广告网络,因为 Chart boost 无缘无故无限期暂停了我的帐户......)

我的问题是,我似乎记得在大约 4-6 个月前的开发过程中,每次我添加另一个变量来保存和加载用户默认值时,都会导致现有游戏崩溃,我必须从头开始删除游戏并将其重新加载到我的手机上以清除用户默认设置。但是现在我添加了 reviewRequest 变量,它不会导致同样的错误,我不确定我是否没有正确测试,以及一旦我更新所有玩家都会失去他们的进度......

我的保存和加载功能代码如下,如果我添加 reviewRequest 变量及其保存和加载行,这是否会导致更新我的应用程序的现有用户出错?我已经更新了我的 Mac OS 和 Xcode,因为它曾经对我崩溃,所以也许这就是它不再是问题的原因?

let defaults = UserDefaults.standard
var reviewRequest = 0

func save() {
    defaults.set(reviewRequest, forKey: "Review Request")
    defaults.set(player.name, forKey: "PlayerName")
}

func load() {
    player.name = defaults.object(forKey: "PlayerName") as! String
    reviewRequest = defaults.integer(forKey: "Review Request")
}

【问题讨论】:

  • 您也许应该添加一个 nil 检查。如果您尝试在没有任何密钥数据的情况下获取默认值,它将崩溃。
  • 好的,我补充一下,谢谢! if reviewRequest == nil { reviewRequest = 0 } else {reviewRequest = defaults.integer(forKey: "Review Request")}
  • 看我的回答:)
  • 这样好多了,不是 reviewRequest 变量是 nil,而是默认对象,谢谢!

标签: ios swift


【解决方案1】:

您应该尝试添加 nil 检查以避免尝试检索空键。

func load() {

    if defaults.object(forKey: "PlayerName") != nil {
      player.name = defaults.object(forKey: "PlayerName") as! String
    } else {
     //Default name or something similar
    }

   if defaults.object(forKey: "ReviewRequest") != nil {
        reviewRequest = defaults.integer(forKey: "Review Request")
        } else {
         reviewRequest = 0
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多