菜鸟教程小白 发表于 2022-12-11 19:57:50

ios - NSLocale.current.description 在 Xcode 9 中崩溃


                                            <p><p>我创建了一个全新的单 View 应用程序,并在 <code>ViewController.swift</code> 文件的 <code>viewDidLoad</code> 方法中添加了一行:</p>

<pre><code>override func viewDidLoad() {
    super.viewDidLoad()
    _ = NSLocale.current.description
}
</code></pre>

<p><code>NSLocale.current.description</code> 行在 Xcode 9 中崩溃,没有堆栈跟踪(只是 EXC_BAD_ACCESS code=EXC_I386_GPFLT 错误消息)。同一个项目在 Xcode 8.3.3 中运行良好。有人知道为什么会这样吗?</p>

<p> <a href="/image/ocSOf.png" rel="noreferrer noopener nofollow"><img src="/image/ocSOf.png" alt="enter image description here"/></a> </p>

<p>这是我的模拟器区域设置:</p>

<p> <a href="/image/Za9kA.png" rel="noreferrer noopener nofollow"><img src="/image/Za9kA.png" alt="enter image description here"/></a> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>根据堆栈跟踪,它似乎试图将 <code>description</code> 视为 ObjC 属性而不是 Swift 属性。基于<a href="https://github.com/apple/swift/blob/master/stdlib/public/SDK/Foundation/Locale.swift#L443" rel="noreferrer noopener nofollow">source code</a> ,这不应该发生。这可能是生成 Swift 库的最新 Swift 编译器中的一个错误,因为它也会在 iOS 9 设备上崩溃。</p>

<p>请务必提交 <a href="https://bugs.swift.org" rel="noreferrer noopener nofollow">bug with Swift</a>因为这似乎是一个语言错误。我已经验证它在最新的 Swift 4 工具链中仍然存在问题。同时,您可以使用您自己的扩展来获得与 <code>description</code> 相同的行为,只需复制我在此处显示的预期实现即可。</p>

<pre><code>class ViewController: UIViewController {

    override func viewDidLoad() {
      super.viewDidLoad()
      // let brokenDescription = NSLocale.current.description
      // let otherBrokenDescription = Locale.current.description

      let objcDescription = (Locale.current as NSLocale).debugDescription //&#34;&lt;__NSCFLocale: 0x1c00dbc10&gt; \&#39;en_US\&#39;}&#34;
      let myDescription = Locale.current.myDescription // &#34;en_US (current)&#34;
    }
}

extension Locale {
    private var _kindDescription : String {
      if self == Locale.autoupdatingCurrent {
            return &#34;autoupdatingCurrent&#34;
      } else if self == Locale.current {
            return &#34;current&#34;
      } else {
            return &#34;fixed&#34;
      }
    }

    public var myDescription: String {
      return &#34;\(identifier) (\(_kindDescription))&#34;
    }

    public var myDebugDescription : String {
      return &#34;\(identifier) (\(_kindDescription))&#34;
    }
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - NSLocale.current.description 在 Xcode 9 中崩溃,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/44768488/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/44768488/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - NSLocale.current.description 在 Xcode 9 中崩溃