(私はこれを探すためにウェブ上で何時間も費やしたので、自己質問と自己回答、そしてほとんどのリソースは説明をせずに「最終的にそれを解決した」と言っています)
非常に単純なCoreData + Bindingsアプリケーションがありました。
上記の項目3は、次のエラーでアプリケーションのクラッシュを引き起こしていました。
[(my NSManagedObject) copyWithZone:]: unrecognized selector sent to instance
そのメソッド(!)を実装し、そこにブレークポイントを置くと、AppleのNSCellクラスによって呼び出されていることがわかりました-これはあまり役に立ちませんでした:(。
これをトリガーするには上記のすべてが必要であることが判明し、XCodeを使用すると、100%ではないにしても、99.9%の状況で間違ったことを実行できます。
Core-Dataオブジェクトできません copyWithZoneを実装します:-これによりクラッシュが発生します
バインディングを使用してテーブルビューにデータが入力されると、NSArrayController内のオブジェクトのvaluesをコピーして、各列をレンダリングしようとします。
...しかし、列バインディングを完全に指定できない場合(Xcodeでは半分指定できます)、tableviewはvaluesではなくobjectsで「コピー」を試みます。 ==
バインディングのバグ:テーブル列に次の「値」があることを指定しました:
コントローラキー= "arrangedObjects"モデルキーパス=(空白)
(これはXCode4オートコンプリートのバグです。タブをすばやく離すとModelKeyPathフィールドが削除されることがあります)
バインディングの入力を終了します。例:
モデルキーパス= "値"
...そしてすべてが再び機能します。
同じ種類のもので同様の問題があったので、ここにも投稿したいと思います
空の定義済みオブジェクト:
不正なコード:
@property (nonatomic, copy, readwrite) MSender * sender;
参照カウントではXcodeがオブジェクトをコピーする方法を知らないため、これはコンパイルエラーをスローするはずです。代わりに、実行時に失敗します...
コードを書く:
@property (nonatomic, strong, readwrite) MSender * sender;
それが誰かを助けることを願っています。
この解決策をありがとう、それは私を正しい方向に向けました。学習している方のためにInterfaceBuilderこの追加情報がお役に立てば幸いです。
チュートリアルを作成しているときに、誤ってText field Cell - Text Cell
をArrayController.ObjectValue
にバインドしたことが判明しました。
実際のバインディングはで発生するはずでした
Table Column > Table Cell View > Static Text - Table View Cell
それは正しかったが、その下のツリーで視覚的に(私はまだ理解していないので、IBにはText Field Cell
が必要です。)私はも バウンド:
Table Column > Text Field Cell - Text Cell
パスがキーのないobjectValue
であったため、オブジェクト全体をコピーしようとしたのは2番目のバインディングであり、このエラーをトリガーしていました。
おそらく初心者の間違いですが、それはすべてのオブジェクトをウォークスルーしてバインディングをチェックすることを意味し、私はこれに遭遇しましたone。
バインディングに関するあらゆる種類の問題を回避するためのヒントとして、コントローラーに次のデータを入力しながらNSManagedObject
をNSDictionary
に変換できます:[object dictionaryWithValuesForKeys:[[object entity] attributeKeys]]
、接続とデバッグがはるかに簡単です:-)
ちなみにポインタをありがとう!
マスター/詳細バインディングを実装しようとしたときに、このエラーが発生しました。部門/従業員に類似したもの。 arrayControllerをDepartmentの "selection.employees"にバインドしようとすると、次のようになります。
-[従業員copyWithZone:]:認識されないセレクターがインスタンスに送信されました
従業員の関係は、意図したとおり、多くではなく、1つに設定されていたことが判明しました。これを修正すると、すべてが順調でした。
同様の問題が発生しました。これは、配列コントローラーから実際のオブジェクトではなく、ProxyObjectを呼び出すことで発生しました。
例えば:
MYEntity *entity = EntityController.selection;
NSString *property = entity.property; // <--- causes the error
だが
MYEntity *entity = EntityController.selectedObjects firstObject]; // <--- fixes the error
NSString *property = entity.property;
これは、NSTableViewDataSource
関数-tableView:objectValueForTableColumn:row:
からビューを返したときに取得しました。代わりに、値を返すことになっています(例:NSString*
)。 (その名前を考えると驚くことではありませんが、エラーはこれを発見するのに役立ちません。私が考えていた関数はNSTableViewDelegate
の-tableView:viewForTableColumn:row:
です。)