問題タブ [nsobjectcontroller]

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.

0 投票する
2 に答える
2641 参照

core-data - 単一のウィンドウ インターフェースで複数のビュー コントローラー間で選択をバインドする

2 つのビュー コントローラー間でいくつかの NSArrayControllers を接続する方法に頭を悩ませている問題があります。ソース リスト テーブル ビューの選択内容を同期して、2 番目の詳細ビュー コントローラーの値を更新したいと考えています。

Cocoa Dev Central Build A Core Data Tutorialを出発点として使用していますが、2 つの NSViewControllers を含む NSWindowController があるようにアーキテクチャを分解しました。1 つは左側の投稿テーブル用、もう 1 つは投稿の詳細用です。権利。

NSWindowController サブクラスには、Post エンティティにバインドされた NSArrayController と、次を指す読み取り専用の managedObjectContext アクセサーがあります。[[NSApp delegate] managedObjectContext]

次に、メソッドで 2 つのビュー コントローラーを初期化しますwindowDidLoad

MDVCPostsListViewControllerPost エンティティにバインドされた NSArrayController と、親ウィンドウ コントローラーの管理オブジェクト コンテキストにバインドされたその管理オブジェクト コンテキストを持ちます (すべて Interface Builder を介して)。

MDVCPostDetailViewControllerには、ウィンドウ コントローラーのマネージド オブジェクト コンテキストにバインドされた NSObjectController と、 を介してウィンドウ コントローラーにバインドされたコンテンツ オブジェクトがありますpostsListsViewController.postsArrayController.selection。これは本当に厄介なハックのようです。

MDVCPostsListViewControllerのテーブル ビューで選択を変更すると、 で選択された値が更新されるようにするにはどうすればよいMDVCPostDetailViewControllerですか? 近づいたような気がしますが、何が欠けているのか、どのルートをたどるのが最善なのかわかりません。postsListsViewController.postsArrayController.selectionバインディングは非常にハッキーだと思います。うまくいけば、より良い方法があります。

説明を読むだけでなくコードを見ることを好む人のために、これを示すサンプル プロジェクトをアップロードしました。私のサイトhttp://www.secondgearsoftware.com/attachments/stackoverflow_objectcontroller.zipから入手できます。

0 投票する
1 に答える
139 参照

objective-c - 2つのNSObjectControllerが必要ですか?

Cocoaバインディングについて学んでいます。2つの完全に異なるオブジェクトがあり、それぞれにユーザーインターフェイスアイテムと同期するiVarがあります。しかし、それらは2つの異なるオブジェクトであり、1つのNSObjectControllerを持つ「コンテンツ」アウトレットにしか存在できないため、別のオブジェクトが必要ですか?

0 投票する
1 に答える
460 参照

cocoa - コア データ: ドキュメント ベースのアプリケーションで「ルート オブジェクト」をインスタンス化する

私は Core Data を使用してドキュメント ベースのプロジェクトを作成していますが、Cocoa は初めてではありませんが、Core Data を利用するのはこれが初めての試みであるため、単に概念的な問題に遭遇しました。私が達成しようとしていることは比較的単純です。新しいドキュメントを起動するたびに、「ルート」オブジェクトとして機能するモデル オブジェクトの 1 つの新しいインスタンスを作成したいと考えています。

私が行ったことは、NSObjectController を xib に追加し、そのモードをエンティティ名 (提供された正しいエンティティ名を使用) に設定し、「Prepares Content」をチェックして、モデル キー パスとして managedObjectContext を使用してその管理対象オブジェクト コンテキストをファイルの所有者にバインドすることです。 . これをテストするために、メイン ウィンドウのタイトルをオブジェクト コントローラーにバインドし、コントローラー キーを選択項目として、モデル キー パスをエンティティ内のキーの 1 つとして使用しました。

プログラムでルート オブジェクトを作成できることはわかっていますが、Apple が推奨するメディエーター パターンを採用しようとしています。「メディエーターパターンの採用」セクションの下の部門従業員チュートリアルの指示を見ましたが、詳細な手順はまさに私が行ったと信じているものです.

何かご意見は?

編集:おそらく、問題を正しく述べていませんでした。モデルは Core Data で作成され、必要に応じて関係が設定されます (「ルート」、子、および葉を使用して、1 対 1 の親関係、対多子関係、および isLeaf ブール属性を使用)。私の問題は、新しいドキュメントが起動されるたびに、このルート オブジェクトがシングルトンとしてインスタンス化されるようにすることです。ルート オブジェクトと現在のドキュメントの間には正確に 1 対 1 の関係が存在する必要があります。ルート オブジェクトは常に存在し、ユーザーの操作なしで使用可能である必要があり、作成されてルートにアタッチされた子ノードはデータ オブジェクトです。アプリケーションによって使用および操作されるもの。

上記の機能をプログラムで実装しましたが、Core Data の原則に従って、メディエーター パターンを完全に採用し、アプリケーション ロジック内のデータ オブジェクトの作成を管理したくありません。

0 投票する
0 に答える
213 参照

objective-c - コントローラ キーの「選択」とは何ですか? また、どのようにデフォルト状態になりますか?

私は現在、バインディングをコントローラーからのグルー コードとして使用する必要があるアプリに取り組んでいます。NSStepperandNSTextFieldをモデルにバインドするこのチュートリアルを見つけましたが、正常に動作します。問題は、これをプログラムで行う必要があることですが、少し混乱します。

ここにチュートリアルがあります。

コントローラークラスで行ったこと:

_model私のモデルはどこですか。しかし、私がこれを行うと:

期待どおりに機能しません。

誰かが私に 5 歳のように説明できますか? また、モデル オブジェクトを参照するようにチュートリアルのように機能させるにはどうすればよいですかselection?NSObjectController

0 投票する
1 に答える
492 参照

cocoa - 自己へのバインドによって発生するリテイン サイクルを防ぐ方法

サブビューからモデル データにアクセスする必要があるアプリケーションがあります。ビュー間でデータを渡すためにバインディングを使用してきました。ただし、バインディングがself保持サイクルを引き起こしているようです (dealloc は呼び出されません)。dealloc メソッドにない場合、いつバインディングを削除する必要がありますか? ありがとう。

PSプロキシオブジェクトコントローラーへのバインド方法は知っていますが、できれば使用したくありません。

これが私がやっていることの例です:

0 投票する
1 に答える
248 参照

objective-c - アプリデリゲートクラスを介して、モデルクラスでプロパティとして宣言されたインスタンス変数の値を変更する

サンプルアプリケーションで次のことを行っています。

モデル クラスを作成し、その中で配列をプロパティとして宣言しました。

私のアプリ デリゲート クラスでは、MyModel をプロパティとして宣言しました。

MainMenu.xib では、オブジェクト コントローラー オブジェクトをドラッグ アンド ドロップし、MyAppDelegate の myModel へのバインディングを実行しました。

私は次のことを達成しようとしています:

MyAppDelegateChange でボタンにバインドされるアクション test: を定義し、charactersToDisplay の値を変更しようとしています。

問題は次のとおりです。

このコードを使用している場合、機能しません:

しかし、以下のコードを使用してオブジェクトコントローラーを介してその値を変更しようとしている場合、それは機能しています:

誰でも私に提案できますか? myModel でセッターメソッドを呼び出して値を直接変更しようとすると、なぜ機能しないのですか?

0 投票する
1 に答える
3939 参照

cocoa - NSTextFieldの値をエラーなしでNSObjectControllerのコンテンツにバインドするにはどうすればよいですか?

ここでは非常に単純な設定を行っていますが、Xcodeからコメントのない赤い「!」が表示されます。InterfaceBuilderでマークを付けます。

Coreデータベースのドキュメントテンプレートから開始しました。ドキュメントxibにはNSObjectControllerインスタンスがあり、その管理対象オブジェクトコンテキストはファイルの所有者(私のNSPersistentDocumentサブクラス)にバインドされています。NSTextFieldが存在し、その値をNSObjectControllerにバインドします...これが問題の原因です。

「モデルキーパス」に「title」と入力します。これは、NSManagedObjectの正しいプロパティであり、テキストフィールドに表示されるはずです。空の[コントローラーキー]フィールドをクリックすると、オートコンプリートによって、NSArrayController専用のフィールドが奇妙に提案されます。

奇妙なオートコンプリート候補のスクリーンショット

コントローラキーとして「content」と入力して(NSObjectControllerの正しいプロパティであるため)、Tab / Returnなどを押すと、次のように「content」がモデルキーパスにシフトダウンされます。

エラーのスクリーンショット

この赤い感嘆符は何のためのものですか?「コントローラーキー」を空のままにし、「モデルキーパス」をcontent.titleとして残すと、アプリは機能します。バインディングは正しく、NSManagedObjectの「title」プロパティを反映しています。「ObjectController」はNSObjectControllerのインスタンスであると確信しています。

0 投票する
2 に答える
129 参照

objective-c - NSManagedObject に実際にアクセスできるのはいつですか?

私は問題があります。

「mapController」と呼ばれる NSObjectController があり、オブジェクトの作成時にいくつかのデフォルトを設定したいと考えています。ドキュメントで提案されているように、ドキュメントのwindowControllerDidLoadNibメソッド内でこれを行います。しかし…</p>

私は試した:

mapController の内容は Core Data の「スクラッチ パッド」にありますが、アクセスできません。その属性の 1 つを次のように設定する必要があります。

これによりエラーは発生せず、ファイルは変更済みとしてマークされますが、値をテストします。

コントローラーのコンテンツが本当にここにあるのはいつですか?画面に何かが表示されますが、実際には何ですか?ドキュメントを読んでも役に立たない…</p>

0 投票する
0 に答える
205 参照

binding - NSObjectController を使用して数値を NSTextField にバインドしますが、表示できません

私はココアプログラミングの初心者です。次のような単純なバインディングコードを作成しようとして、バインディングを学んでいます。

anObjectCtrler は Interface Builder の NSObjectController であり、NSTextField をオブジェクト コントローラー (anObjectCtrler のクラス) に、モデル キー パス「値」およびコントローラー キー「選択」で「バインド」します。オブジェクト コントローラは、オブジェクトとしてファイルの所有者への参照アウトレットを持っています。

コードを実行すると、NSTextField に「選択なし」と表示されますが、「self.aValue」の値とは異なります。「NSLog...」の出力を使用してオブジェクト コントローラーの内容を確認すると、正しい値が表示されます。

誰でもこれを解決するのを手伝ってくれますか?

どうもありがとう。

0 投票する
1 に答える
1948 参照

objective-c - KVO: +keyPathsForValuesAffectingNSObjectController (のサブクラス) では動作しません

私は、動的プロパティがプロパティの影響を受けるKVO 対応クラス (と呼びますObservee)を持っています。プロパティ間の依存関係は、実装メソッドによって定義されます。affectedValueaffectingValue+keyPathsForValuesAffectingAffectedValue

のサブクラスでない限り 、期待どおりに変更され たaffectingValue通知に値を設定します。完全な例は次のとおりです。affectedValue OvserveeNSObjectController

この例は正常に機能し、次のように出力されObserveeますNSObject

しかし、Observee派生する場合NSObjectController:

(「影響を受けるキーパス=影響を受ける値」が存在しないことに注意してください。)

どちらの場合も呼び出されるようですkeyPathsForValuesAffectingAffectedValueが、後者ではノーオペレーションです。

また、(のサブクラス) のインスタンスを含むNSObjectControllerキー パスは、次のような他のキー パスには影響しません。

このような場合、キー パス間の依存関係を宣言するにはどうすればよいですか? そして、なぜこのすべてが起こっているのですか?

(はい、友人のことは知っていwill/didChangeValueForKey:ますが、影響を与えるすべてのキー パスを (別の) セッターでまとめるのはひどいので、避けたいと思います。)