首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 13 UserDefaults:在某些设备上启动应用程序崩溃

iOS 13 UserDefaults:在某些设备上启动应用程序崩溃
EN

Stack Overflow用户
提问于 2019-10-16 13:12:44
回答 1查看 1.5K关注 0票数 1

应用程序在iOS 13上运行时会在一些设备上崩溃。该应用程序正在生产中,我在Xcode组织者崩溃中看到了这个问题。我不能在模拟器或任何物理设备上重现这个问题。

我想这与本土化有关。我使用'AppleLanguages‘键,并将所选语言保存为数组。我将用户默认值中的语言保存为:

代码语言:javascript
复制
static var language: Language {
    get {

        if UserDefaults.standard.bool(forKey: isLanguageSelectedKey) {
            if let languageCode = UserDefaults.standard.array(forKey: appleLanguagesKey)?.first,
                let language = Language(rawValue: languageCode as! String) {
                return language
            } else {

                return Language.someLanguage
            }
        } else {
            return Language.someLanguage
        }

    }

    set {
        guard language != newValue else {
            return
        }
        UserDefaults.standard.removeObject(forKey: appleLanguagesKey)
        UserDefaults.standard.synchronize()

        UserDefaults.standard.set([newValue.rawValue], forKey: appleLanguagesKey)

        UserDefaults.standard.synchronize()
    }

我在Xcode组织者Crashes中看到的Stacktrace是:

代码语言:javascript
复制
Last Exception Backtrace (0)
0   (null) in __exceptionPreprocess ()
-------------------------------------------------------
8   (null) in +[NSUserDefaults(NSUserDefaults) standardUserDefaults] ()
9   (null) in __45+[GMSx_GTMSessionFetcher fetcherUserDefaults]_block_invoke ()
10  (null) in _dispatch_client_callout ()
11  (null) in _dispatch_once_callout ()
12  (null) in +[GMSx_GTMSessionFetcher fetcherUserDefaults] ()
13  (null) in +[GMSx_GTMSessionFetcher fetchersForBackgroundSessions] ()
14  (null) in +[GMSx_GTMSessionFetcher load] ()
15  (null) in load_images ()
-------------------------------------------------------



Thread 1
0   (null) in __pthread_kill ()
-------------------------------------------------------
9   (null) in _dispatch_once_callout ()
10  (null) in +[GMSx_GTMSessionFetcher fetcherUserDefaults] ()
11  (null) in +[GMSx_GTMSessionFetcher fetchersForBackgroundSessions] ()
12  (null) in +[GMSx_GTMSessionFetcher load] ()
13  (null) in load_images ()
-------------------------------------------------------
EN

回答 1

Stack Overflow用户

发布于 2019-10-16 16:35:34

我不是什么都有,所以这里有一些假设可能没有得到适当的解决:

代码语言:javascript
复制
static var language: Language {
get {
        if UserDefaults.standard.bool(forKey: isLanguageSelectedKey),
             let languageCode = UserDefaults.standard.array(forKey: appleLanguagesKey)?.first as? string,
             let language = Language(rawValue: languageCode) {
                return language
        }
        // No language value found, so return someLanguage
        return Language.someLanguage

    }
set {
    guard language != newValue else {
        return
    }
    UserDefaults.standard.removeObject(forKey: appleLanguagesKey)
    UserDefaults.standard.set([newValue.rawValue], forKey: appleLanguagesKey)
}

做了什么?

  1. languageCode现在已被安全地打开以避免强制强制转换,这可能导致
  2. 崩溃-- if语句被重写以使其更简洁,并消除了导致Language.someLanguage返回
  3. 的一个场景--我删除了setterH 210G 211中的synchonize()调用。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58414197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档