3

新しくリリースされたXcode 7.3に更新するまで、null可能なinitを備えたこのNSDate拡張機能があります。

EXC_BAD_ACCESS でクラッシュするようになりました。

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

これに対する解決策はありますか?理解できません-NSDateの拡張機能を何らかの形で悪用していますか?

4

1 に答える 1

1

ダンが彼のコメントで既に述べたように、失敗可能なイニシャライザから戻るnil(またはスローするイニシャライザからスローする) 前に常にオブジェクトを初期化することで、この問題が修正されます。

根本的な問題の詳細については、SR-704: EXC_BAD_ACCESS on return nil from a failable initializer of NSObject subclass を参照してください。メインライン ブランチで修正されたようですが、最終的な Swift 2.2 リリースには含まれていません。次回のポイントアップデートで修正される予定です。

于 2016-03-24T16:43:20.397 に答える