2016-03-23 10 views
3

Ich habe diese NSDate-Erweiterung mit Nullable Init, die die ganze Zeit gut funktionierte, bis ich auf neu veröffentlichten Xcode 7.3 aktualisiert.Neue Xcode 7.3: Swift NSDate Erweiterung mit Nullable Bequemlichkeit Init stürzt ab EXC_BAD_ACCESS

Jetzt stürzt es mit EXC_BAD_ACCESS ab.

extension NSDate 
{ 
    convenience init?(dateString:String, formatString:String?) 
    { 
     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = formatString 

     let newDate:NSDate? = dateFormatter.dateFromString(dateString) 

     if let newNewDate = newDate 
     { 
      self.init(timeInterval:0, sinceDate:newNewDate) 
      return 
     } 

     print("ERROR: Wrong format [\(formatString)] for date [\(dateString)]") 
     return nil 
    } 
} 

let d1 = NSDate(dateString: "2016-01-01 11:00:00", formatString: "yyyy-MM-dd hh:mm:ss") // OK 
let d2 = NSDate(dateString: "qq123", formatString: "qwe") // EXC_BAD_ACCESS 

Haben Sie eine mögliche Lösung dafür? Kann nicht herausfinden - missbrauche ich irgendwie die Erweiterung von NSDate?

+2

Wenn Sie 'self.init()' vor 'return nil' aufrufen, dann funktioniert es – dan

+0

Danke, das hat geholfen ... obwohl, ich verstehe nicht warum, aber zumindest funktioniert es jetzt. (y) – Maris

Antwort

1

Da dan bereits in seinem Kommentar erwähnt wurde, behebt dieses Problem, ob das Objekt vor der Rückgabe nil von einem nicht initialisierbaren Initialisierer immer initialisiert wird (oder von einem werfenden Initialisierer geworfen wird).

Weitere Informationen zum zugrunde liegenden Problem finden Sie unter SR-704: EXC_BAD_ACCESS on returning nil from a failable initializer of NSObject subclass. Sieht so aus, als wäre es in der Hauptfiliale repariert worden, hat es aber nicht in die endgültige Version von Swift 2.2 geschafft. Erwarte, dass es beim nächsten Punktupdate behoben wird.