問題タブ [nsarraycontroller]
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.
objective-c - 削除ボタンをクリックすると、選択されている行ではなく、アウトライン ビューの下部にある行が削除されるのはなぜですか?
アウトライン ビュー (NSTreeController に接続) で行を選択して削除ボタンをクリックすると、選択した行は削除されませんが、実際にはテーブルの下部にある行が削除されます。詳細については、ボタンの接続を次に示します。
そしてエンティティモデル:
さらに情報が必要な場合は、お気軽にコメントしてください。
objective-c - NSArrayController を介してモデルの変更を通知する方法は?
のにバインドされているNSView
サブクラスがありarrangedObjects
ますNSArrayController
。配列にアイテムが挿入または削除されると、ビューに通知されます。配列に格納されているモデルの属性が変更された場合に通知を受けるにはどうすればよいですか?
配列に追加されたすべてのアイテムのすべての (関連する) 属性にビューをオブザーバーとして追加する必要がありますか?
配列にアイテムが追加または削除されるobserveValueForKeyPath:ofObject:change:context:
と、NSView
サブクラスで通知されます。配列に格納されているモデルへの変更は通知されませんが、挿入が通知されるたびに、ビューをオブザーバーとして新しいアイテムの属性に追加できます。これはこれを行うための最良の方法ですか?
何が起こるかを確認できるようにモデル クラスをオーバーライドし、適切な属性へのオブザーバーとして自分自身を追加する列にバインドされているaddObserver
ことに気付きました。これを自動的に行うことはできますか、それとも手動で監視を設定する必要がありますか?NSTableView
arrangedObjects
cocoa - Cocoa: アプリケーションの設定に格納されている NSString の配列へのバインディング
わかりました、私はこの質問をするのは本当に本当にばかげていると感じていますが、自分自身の答えを理解するための適切な分離ができていないのではないかと思うほど、自分自身を苦しめることができました. あらかじめお詫び申し上げます...
私はしばらくバインディングをいじっていて、それらが大好きです。それと、Objective-C 2.0 に組み込まれている KVO/KVC 規則により、アプリケーションを大幅にスリム化しながら、信頼性や柔軟性などを向上させることができました。これを言うのは、バインディングに少なくとも適度に慣れていることを示すためだけです。一般に。そうは言っても、私の問題はこれです:
設定コントローラーを介して編集可能な一連のキーワードを保存したいアプリケーションがあります。簡単ですよね?残念ながら、私の人生では、それを行う方法がわかりません。配列コントローラーをセットアップし、共有設定オブジェクトをポイントして、配列のキーパスを指定します。問題は、配列に格納されているオブジェクトが NSString であり、「stringValue/setStringValue」メソッドがないため、この種の操作で NSString を KVC に準拠させる方法がわかりません。それらがなければ、そのリストの操作を容易にするために設定した NSTableView でどのキーパスを使用すればよいでしょうか?
また、共有設定オブジェクトは私が所有するものではないため、編集されていない/新しくインストールされた状態を表す新しい配列を設定する方法がわかりません。(それらをデフォルトとして登録してもうまくいかないようです。)
私の質問をより簡潔に繰り返すと、テーブル ビューを NSString の配列にバインドする方法と、その配列をアプリケーションの設定に保存する方法を教えてください。
あなたが提供できる指針やアドバイスは非常に高く評価されます. 私がこれから得ている頭痛は、私を良くし始めています。:)
cocoa - NSArrayController で特定の要素を見つける
いくつかの要素を含む NSArrayController があります。これらの要素には、「name」、「interformation」などのいくつかの属性があります。
私が望むのは、名前属性が「マッド」に設定されている NSArrayController 内の要素を見つけることだけです。
ここでは効率は大きな問題ではないので、'name' 属性が 'Mads' であるかどうかを確認しながら、NSArrayController のすべての要素を反復処理して線形検索を行うだけです。
しかし、NSArrayController から NSIterator を取得できないように見えるので、これを行う別の方法があるかどうか疑問に思っています。
どんな助けでも大歓迎です
binding - フィルター述語を使用して NSTableView で選択された行インデックスを取得する際の問題
これを適切に表現しているかどうかはわかりませんが、基本的にはメイン アプリのデリゲートでこれを行います。
Application *app = [[Application alloc] initWithApplication:fullPath]
Application クラスには、アプリのパスを受け取り、appPath や名前などのプロパティを設定する initWithApplication メソッドがあります。次に、新しい「アプリ」オブジェクトをアプリケーションの NSMutableArray に追加します。
NSArrayController のコンテンツ配列はアプリケーションの NSMutableArray にバインドされ、さまざまなキー (appPath、名前など) が NSArrayController に設定されます。次に、名前の 1 つの列、パスの 1 つの列など、さまざまなプロパティにバインドされたさまざまな列を含むテーブル ビューを作成します。
次に、テーブル ビューで選択されたアプリを起動する起動ボタンがあります。これには、次のコードを使用します。
次に、現在選択されているアイテムのパスへの参照として「app.appPath」を使用します。これはうまくいきます。この問題は、filterPredicate を使用してテーブル ビューのコンテンツをフィルター処理するときに発生します。基本的に、テーブル ビュー内のすべてのアプリを除外し、検索ボックスに入力されたフレーズを名前に含むアプリのみを残します。
上記の方法は、テーブル ビュー内のアイテムのインデックスを取得するため機能しません。また、すべてのアイテムがテーブル ビューにないため、カウントがめちゃくちゃになります。たとえば、アプリケーション配列のインデックス 25 のアイテムである MyApp.app というアプリがあるとします。
上記のコードは、tableView と applications 配列に同じ数のオブジェクトがあるため、うまく機能します。ただし、テーブル ビューのコンテンツを除外すると、オブジェクトの数に違いが生じるため、間違ったアプリが起動されます。
私の説明があまり混乱しないことを願っていますが、説明するのは難しいです. これを回避する方法はありますか?
ありがとう
objective-c - NSCollectionView は何も描画しません
を設定しようとしていますNSCollectionView
(過去に成功しましたが、何らかの理由で今回は失敗しました)。
「TestModel」というモデルクラスがありNSString
、文字列を返すだけのプロパティがあります(現在はテスト目的のためだけです)。次にNSMutableArray
、メイン アプリのデリゲート クラスでプロパティ宣言を行い、この配列にTestModel
オブジェクトのインスタンスを追加します。
次に、Content Array がアプリのデリゲートにバインドされた Array Controller を用意しますNSMutableArray
。ここまでのすべてが正常に機能していることを確認できます。NSLogging:
うまくいきました。
次に、コレクション ビューのセットアップ (itemPrototype とコンテンツ)、およびコレクション ビュー アイテム (ビュー) に適切なバインディングをすべて用意します。次に、 Collection View にバインドされたコレクション アイテム ビューにテキスト フィールドを作成しますItem.representedObject.teststring
。ただし、アプリを起動すると、コレクション ビューには何も表示されず、空白の白い画面だけが表示されます。私は何が欠けていますか?
更新:これが私が使用するコードです(wil shipleyによって要求されました):
そして、前述のように、Array Controller のコンテンツ配列はこの「objectArray」にバインドされ、NSCollectionView の Content は Array Controller.arrangedObjects にバインドされます。NSLogging [arrayController ArrangeObjects] によって配列コントローラーにオブジェクトが含まれていることを確認でき、正しいオブジェクトが返されます。NSCollectionView には何も表示されません。
更新 2: [collectionView content] をログに記録すると、何も得られません:
問題はおそらくそこにあります。
更新 3:ここで要求されたのは、Xcode プロジェクトです。
http://www.mediafire.com/?mjgdzgjjfzw
メニューバー アプリなので、ウィンドウはありません。アプリをビルドして実行すると、「test」というメニューバー項目が表示されます。これにより、NSCollectionView を含むビューが開きます。
ありがとう
cocoa - アレイコントローラーからエンティティを削除するときにエンティティを削除するにはどうすればよいですか?
管理対象オブジェクトモデルに、他の2つのエンティティ(部門とチームなど)に関連するエンティティ(従業員など)があります。どちらの関係も1対多です(つまり、従業員には1つの部門と1つのチームが必要であり、チームと部門には多くの従業員がいます)。この2つは重複する場合と重複しない場合があります(たとえば、チームがHR、経理、ITの従業員で構成されている場合や、1つの部門の複数の従業員で構成されている場合があります)。
2つのNSTableViews、DepartmentテーブルとTeamテーブルにデータを提供する2つのNSArrayControllerがあります。従業員は部門間やチーム間を問題なく移動できますが、従業員を削除(解雇)する方法がわかりません。
いずれかのアレイコントローラーに削除メッセージを送信すると、従業員はチームから削除されますが(たとえば)、部門に残され、オブジェクトグラフは一貫性のない状態になります。両方のコントローラーで削除アクションを呼び出しても、オブジェクトは削除されません。孤立していて、ただぶらぶらしているだけです。
元々、(従業員エンティティの)部門とチームの関係をNullifyの削除ルールに設定していましたが、一方または両方をカスケードに変更しても役に立ちません。
従業員を実際に削除するには、アレイコントローラーのremove:アクションをオーバーライドする必要がありますか、それとも本当に明らかなものが欠落していますか?
cocoa - Cocoa-Binding の更新 - NSArrayController - ComboBox
私のアプリケーションでは、非常に単純なバインディングを作成しました。NSArrayController にバインドされた NSMutableArray があります。コントローラー自体は ComboBox にバインドされ、NSMutableArray のすべてのコンテンツを表示します。正常に動作します。
問題は次のとおりです。配列の内容が変更されます。ユーザーがアプリに何らかの調整を加えた場合、NSMuteableArray 内のすべてのアイテムを削除し、新しい別のアイテムで埋めます。
ただし、NSMutableArray <-> NSArrayController <-> NSComboBox のバインドは更新されません。
Array からすべてのオブジェクトを削除しても、ComboBox には同じアイテムが表示されます。
ここで何が問題なのですか?私のアプローチは間違っていますか、それともバインディングにそれ自体を更新するように指示するだけでよいですか? その方法がわかりませんでした。
cocoa - NSArrayController に相当する Cocoa Touch は何ですか?
Core Data を少し使い始めて、通常の Cocoa アプリケーションでの使用方法を理解しましたが、Cocoa Touch では少し異なるようです。Cocoa Touch でエンティティを表のセルなどのオブジェクトにバインドするにはどうすればよいですか?