2017-06-26 5 views
2

ich eine brandneue Single View-Anwendung erstellt und hinzugefügt eine Zeile zur viewDidLoad Methode der ViewController.swift Datei:NSLocale.current.description in Xcode Absturz 9

override func viewDidLoad() { 
    super.viewDidLoad() 
    _ = NSLocale.current.description 
} 

Die NSLocale.current.description Linie stürzt in Xcode 9 ohne Stapel Trace (nur ein EXC_BAD_ACCESS-Code = EXC_I386_GPFLT Fehlermeldung). Das gleiche Projekt läuft in Xcode 8.3.3 gut. Hat jemand irgendwelche Ideen, warum das passiert?

enter image description here

Hier ist meine Simulator Region Einstellungen:

enter image description here

+1

Sie verwenden var nicht oder lassen. –

+2

@LeoDabus Das ist ein gültiger Code und sollte keinen Laufzeit-Crash verursachen. –

+0

Welchen Build von Xcode 9 laufen Sie? Und was ist das Gebietsschema des Systems, auf dem Sie dies ausführen? –

Antwort

0

Dies war ein in Xcode 9 Beta Fehler behoben 5.

0

auf dem Stack-Trace Basierend, es sieht aus wie es versucht, description als ObjC Eigenschaft zu behandeln anstatt eine Swift-Eigenschaft. Basierend auf der source code sollte dies nicht passieren. Es ist wahrscheinlich ein Fehler im neuesten Swift-Compiler, der die Swift-Bibliotheken erzeugt, weil er auch auf einem iOS 9-Gerät abstürzt.

Achten Sie darauf, eine bug with Swift Datei, da dies ein Sprachfehler zu sein scheint. Ich habe festgestellt, dass es in der neuesten Swift 4 Toolchain noch immer kaputt ist. In der Zwischenzeit können Sie das gleiche Verhalten von description mit Ihrer eigenen Erweiterung erhalten, indem Sie einfach die beabsichtigte Implementierung duplizieren, wie ich sie hier gezeigt habe.

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 //"<__NSCFLocale: 0x1c00dbc10> \'en_US\'}" 
     let myDescription = Locale.current.myDescription // "en_US (current)" 
    } 
} 

extension Locale { 
    private var _kindDescription : String { 
     if self == Locale.autoupdatingCurrent { 
      return "autoupdatingCurrent" 
     } else if self == Locale.current { 
      return "current" 
     } else { 
      return "fixed" 
     } 
    } 

    public var myDescription: String { 
     return "\(identifier) (\(_kindDescription))" 
    } 

    public var myDebugDescription : String { 
     return "\(identifier) (\(_kindDescription))" 
    } 
}