2016-08-23 18 views
0

私はKVO機能を使用するコードを持っています。エラー:実行が中断された、理由:EXC_BAD_INSTRUCTION(コード= EXC_I386_INVOP、サブコード= 0x0)

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    ... 
    let oldRect = change?[NSKeyValueChangeOldKey] as! NSRect 

だから私はNSRectに値をキャストしようとしていたとき、私はエラーを取得しています:

error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0). 

とオブジェクトは、NSRectタイプのオブジェクトです:

(lldb) po change?[NSKeyValueChangeOldKey] 
▿ Optional<AnyObject> 
    - Some : NSRect: {{293, 21}, {108, 108}} 

答えて

1

ご存知のように、 changeのパラメータがの場合、タイプは[String : AnyObject]?であり、内部ではNSDictionaryであり、値としてNSRangeを含めることはできません。

したがって、KVOはNSValueに値をNSRangeに変換します。しかし残念ながら、それはSwiftのNSRangeに直接ブリッジすることはできません。

このような何か試してみてください:

let oldRect = (change?[NSKeyValueChangeOldKey] as! NSValue).rectValue 
関連する問題