cannot create BOOL from object
CoreDataでエラーが発生しました。私はこれについて多くの質問を読みましたが、すべて同じ結論に至りました。IBのバインディングが正しくないということです。
たとえば、すべてのバインディングを一覧表示する方法はありますか、またはバインディングのタイプをチェックするユーティリティアプリはありますか?おそらくエラーをキャッチするか、これが発生したときに呼び出されるメソッドを実装して、バインドされたオブジェクトの名前を取得できるようにしますか?誰かに私の分析をしてもらうよりも、自分で解決したいです.xib
。
1 に答える
1
私はこれの上に髪を引っ張ってきました。数十または場合によっては数百のバインディングを持つXIBでは、これがどこから来ているのかを見つけることはほとんど不可能です。しかし、私はついにそれを少し絞り込む方法を見つけました。
シンボリックブレークポイントを設定しました
-[NSValueBinder _observeValueForKeyPath:ofObject:context]
次のように構成します
- 処置:デバッガコマンド、
po $rdi
実行するコマンドとして入力してください。これにより、ブレークポイントに到達するたびに自己(つまりNSValueBinderの説明)が出力されます。これ($rdi
)はx86_64用です。他のアーキテクチャについては、この記事を参照してください。 - 評価後に自動的に続行をチェック
プログラムを実行すると、コンソールに一連のバインディング関連のログが表示され、次のようになります。
$7 = 4301564448 <NSTextValueBinder: 0x10064aa20>{object: <NSTextFieldCell: 0x10061eea0>, bindings: value=selection.myProperty}
最後のものは明らかに例外をスローするものです。私は通常、バインディング値から直接、またはエラーが発生する前に確立された他のバインディングのいくつかから、それがどのビューであるかを理解できます。役立つもう1つのことは、たとえば上記の例で、問題のあるオブジェクトのsuperview
orを調べることです。controlView
po [0x10061eea0 controlView]
于 2013-03-12T14:48:43.053 に答える