問題タブ [cocoa-bindings]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocoa - Core Dataと抽象エンティティを使用してマスター/詳細インターフェイスを作成するにはどうすればよいですか?
Appleには、簡単なマスター/詳細インターフェイスを作成するためのちょっとしたチュートリアルがあります。Interface Builderは、CoreDataエンティティから自動的に生成します。しかし、私は単純な例よりも複雑なことをしようとしていて、それを機能させるためにしばらく苦労してきました。
CoreDataドキュメントベースのアプリケーションがあります。モデルには、抽象エンティティのページと、ページのいくつかの具体的なサブエンティティが含まれています。すべてのページにはいくつかの共通の属性(「名前」など)があり、それらはページで定義されています。明らかに、サブエンティティには固有の属性があります。
ユーザーがマスターリスト(NSTableView)内のすべてのタイプのページを表示できるようにするインターフェイスが必要です。ページを選択すると、表示される詳細フィールドは、ページの種類によって異なります。
これが私が今持っているものです:
マスターリストが表示されるメインのnibファイルと、ページに共通するすべてのフィールドがあります。各ページタイプには、特定のフィールドを持つペン先があります。メインのnibファイルにメインのNSArrayControllerがあり、NSTableViewにデータが入力されています。各ページ固有のペン先にもNSArrayControllerがあるので、詳細フィールドを現在の選択の属性にバインドできます。すべてのNSArrayControllerは同じように構成されており、すべて同じmanagedObjectContextと同じselectionIndexesにバインドされています。
私はアーロンヒレガスのビュースワッピングの方法を使用しています。彼は彼のココアの本で説明しています。そこで、NSTableViewSelectionDidChangeNotificationsに登録しました。これを受け取ると、メソッドswitchViewが呼び出されます。
switchViewは、現在選択されているオブジェクトを調べ、それがどのタイプのページであるかを確認し、Hillegassの方法に従って適切なnibファイルをスワップします。
1つのタイプのページのみを追加するとすべて正常に機能しますが、2番目のタイプのページを追加するとすぐに、次のエラーが発生します。
オブジェクトのキーパスselectionIndexesの値の設定エラー(バインドされたオブジェクトエンティティから:ページ、選択されたオブジェクトの数:1):[valueForUndefinedKey:]:エンティティNoColPageは、キー側のキー値コーディングに準拠していません。
エラーの最後の部分は理にかなっています。間違ったペン先を表示しようとしてスタックしているため、このオブジェクトには存在しないフィールドにバインドしようとしています。
すべてのNSArrayControllerが同じ場所にバインドできるように、selectionIndexesフィールドをMyDocumentに追加しました。私はこれについて何日も苦しんでいて、それを理解することができません。何か案は?
それが役立つ場合は、ここにダウンロードできるサンプルプロジェクトがあります。この問題に関連するものだけをプロジェクトから新しいダミーアプリケーションに抽出し、それをテストして試してみました。
PS:CoreDataエンティティからマスター/詳細インターフェイスを生成するためのInterfaceBuilderのツールは、抽象エンティティの場合とは異なります。スーパーエンティティの属性のフィールドのみを作成します。
編集:ジョシュアは何かに取り組んでいると思いますが、残念ながらそれは機能しません-私は同じ問題に遭遇し続けます。-unbind:はキーパスではなく文字列定数を期待していることを理解していなかったため、最初は苦労していました。
私はいくつかのバリエーションを試しました。現在表示されているnibのアレイコントローラーを追跡します。ここで、現在表示されているページタイプを追跡し、別のページタイプを表示しようとしている場合にのみバインド解除/再バインドします...
これがコードの関連セクションです。
}
xcode - Core Data の特定のレコードを呼び出す
プレーヤーがユーザー データを編集するための編集ウィンドウをセットアップしています。編集フォームのすべてのフィールドを ( 経由でNSArrayController
)適切な Core Data エンティティにバインドしawakeFromNib
、レコードの呼び出しを処理するメソッドをインストールしましたが、メソッド内に何を入れればよいかわかりません表示するレコードを取得します。
最終的に、これに関する私の目標は、アプリケーションがユーザーのエントリが存在するかどうかを確認し、テーブルにエントリがない場合はユーザー用に作成するように設定することです。
xcode - Xcodeのバインディングを使用して内部をいじくり回す
次のように設定された2つのCoreDataエンティティを取り上げましょう。
エンティティA:車
エンティティB:メーカー
さて、私がやりたいのは、ディスプレイをNSTableView
1つの列に車のモデル、メーカー、年の順に表示する場所にバインドすることです。モデルと年をバインドすることは問題ありませんが、関係をテーブルの列にバインドすると、探しているものではなく、その列の各セルに関係障害エラーのテキストが表示されます。 車に関連付けられている適切なメーカー名を表示できるように、バインディングを操作するにはどうすればよいですか?
質問をもう少し拡張すると、同じ関係Car
を持つ他のエントリなどを表示するために、別のテーブルビューを設定するにはどうすればよいですか?manufacturer
cocoa - InterfaceBuilderの別のテーブルでの選択に応じてテーブルの表示を作成する
2つのNSTableViewでウィンドウを設定しました。Core Dataには、2つのエンティティが設定されており、そのうちの1つには、もう1つのより大きなグループ(例cars
とmanufacturers
)のメンバーが含まれています。エンティティごとにエントリページを設定しましたが、そこでうまく再生されます(ドロップメニューで多対1から選択しようとしても問題はありません)。私が今やろうとしていることは、それをさらに一歩進めてmanufacturer
、メインでaを選択すると、それに関連するNSTableView
リストが2番目に表示されるようにすることです。cars
manufacuturer
NSTableView
manufacturer
ポップアップボタンに対して行ったのと同様のバインディングを使用して、エンティティから値をフィードしようとしましたが、選択したエントリに関係なく、cars
すべてのエントリのリストが表示されているだけです。述語をフィルタリングするためのオプションが表示されませんが、バインディングのキーパスをに設定すると、関係の障害が表示されます。子テーブルに表示されるものをフィルタリングするにはどうすればよいですか?car
manufacturer
manufacturer.cars
objective-c - NSSlider によって制御される IKImageView ズーム
NSSlider を介して IKImageView 内で画像のズーム率を設定するためのベスト プラクティスは何ですか?
IKImageView のズームインまたはズームアウト アクションにスライダーをバインドできました。明らかに、私が見たいのは、これらの両方のアクションを制御する単一のスライダーです。スライダーを変更するたびに画像が更新される場合に最適です (マウス ボタンがまだ離されていなくても継続的に)。
cocoa - バインディングに従ってテーブル ビューが更新されない - パート 2
タイトルはこの質問から借用しましたが、これは重複していません。その質問者にとって何が悪かったのかについては、私の回答を参照してください。私はその答えの作者であり、私の問題はそれではありません。
3 つの列を持つテーブル ビューがあり、その値バインディングはarrangedObjects
配列コントローラーの 3 つのプロパティにバインドされています。配列コントローラーは、ドキュメント オブジェクトの にcontentArray
バインドされています。visitationResults
その配列内の項目は、モデル クラス (VisitationResult) のインスタンスです。selectionIndexes
また、配列コントローラとsortDescriptors
ドキュメントのプロパティをバインドしました。
私はいくつかのアクセサーを介して自分のプロパティを変更しています:
このNSLog
ステートメントが実行され、配列コントローラーがモデル オブジェクトを収集して配置していることを確認します。これは、私が自分のプロパティを調べて、ドキュメントの KVO 通知を取得していることを意味します (これは、以前の質問者の問題である、プロパティをバイパスするという問題が、私が抱えている問題ではないことを証明しています)。
NSLog
モデル オブジェクト クラスのアクセサ メソッドにステートメントを追加しました。それらの 1 つは、オブジェクトを並べ替えるために、配列コントローラーによって呼び出されています (そのプロパティが並べ替えキーです)。配列コントローラーが知らない他の 2 つは呼び出されません。
したがって、テーブル ビューは空白のままです。
cocoa - CoreData を使用して NSArrayController からオブジェクトを削除する自動永続化
からのエンティティのコレクションを表すためNSTableView
にバインドされた 1 つの列を持つ があります。削除アクションに接続されている「削除」ボタンもあり、すべて正常に機能します-テーブルにデータが表示され、「削除」をクリックすると、エンティティがテーブルから削除されるなど.NSArrayController
NSManagedObjectContext
NSArrayController's
ただし、この削除はオブジェクト グラフでのみ発生しているようで、ディスクに永続化されることはありません。このような変更をオブジェクトグラフに自動的に永続化するフラグまたは方法はありますか、またはIBAction
削除ボタンに new を導入し、最初remove
にコントローラーで明示的に呼び出し、次にsave
onを明示的に呼び出す唯一の方法はありNSManagedObjectContext
ますか?
cocoa - コアデータによって駆動されるバインディングを備えたNSOutlineView
NSOutlineView
アプリケーションのソースリストとして機能し、データモデルはCoreDataで作成されています。次のように、バインディングを使用して(可能であれば)これらのものを接着したいと思います。
モデルには3つの主要なエンティティがあります。たとえば、「店舗」、「車」、「人」と呼びましょう。
私の目標は、アウトラインビューに3つの「グループ」(iTunesのプレイリストなどの拡張可能なノード)を持たせ、各グループが私のエンティティの1つを表し、一覧表示することです。また、ウィンドウの下部に「追加」するための3つのボタンがあります。そのアクションを実行するために配線したい「Store」、「AddCar」など。
これまでのところ、ウィンドウのペン先には、ウィンドウコントローラーのNSManagedObjectContextインスタンスにバインドされているTreeControllerがありますが、TreeControllerからアウトラインビューを適切にバインドして設定する方法がわかりません。
これはバインディングで可能ですか?アウトラインノードのエンティティを使用して2番目の管理対象オブジェクトモデルを作成するチュートリアルを見たことがありますが、この記事に対するコメントの中には、これは悪い考えだと書かれているものもあります。どうすればいいのかよくわかりません。どんな助けでも素晴らしいでしょう!
cocoa - Cocoa バインディングを使用しているときに設定の保存をキャンセルするには?
バインディングをいじり始めたところです。いくつかの NSColorWell を共有デフォルト コントローラーにバインドする設定ダイアログの実装を開始しました。それは完璧に機能しています。私の値は正しくエンコードされ、保存されます。
ただし、機能していないのは、ダイアログをキャンセルすることです。キャンセルしても、値は保存されます。
キャンセル ボタンを NSUserDefaultController の「元に戻す」にバインドする必要があるようですが、もちろんそうすると、「performClose」にバインドできません (ボタンを複数のアクションにバインドする方法がない限り)。認識していません)。
変更を元に戻し、ウィンドウを閉じるには、キャンセル ボタンをバインドする必要があります。明らかに、両方を実行するアクション メソッドを作成することでそれを行うことができますが、IB だけで可能であるように思われます。
cocoa - NSTableViewの画像がフェードアウトするのはなぜですか?
まずNSArrayController
、コンテンツが「サーバー」オブジェクトの配列である(「サーバー」)があります。
コラム付きもありNSTableView
ます。列はサーバーの「arrangedObjects.status」プロパティにバインドされています。
私はカスタムを使用しNSValueConverter
て、そのステータスを列の画像にしdataCell
ますNSImageCell
。
私が理解していないのは、列に表示される画像が正しいのに、一貫してフェードアウトしている理由です。テストのために、比較のためにテーブルビューの外側に同じ画像があり、うまく描画されます。画像の色は半透明ではありません。
画像は色あせてNSImageCell
描画されますか?それらを完全に飽和状態にするIBで構成できるものはありますか?