問題タブ [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 - init メソッドで addObserver:forKeypath:options:context: を使用すると奇妙な問題が発生する
Apple と私が見た多くの例によると、KVO/KVC を使用して自分自身を監視することに問題はありません。また、それらの同じ情報源によると、オブジェクトの init メソッドで addObserver:forKeypath:options:context: を使用してこれを設定することは問題ではありません。
残念ながら、何らかの理由で、オブザーバー メソッドを実行しても呼び出されません。addObserver 呼び出しを別のメソッドに移動し、呼び出し元のメソッドでそのメソッドを呼び出すと、次のようになります。
その後、すべて問題ありません。これは NSImageView のサブクラスなので、「awakeFromNib」タイプの代替手段がここにあるわけではありません...私は本当に頭を悩ませていますが、明らかな何かが欠けていると確信しています。自分自身のKVOがinitメソッドで機能しないようにしますが、ここでヒントを与えるドキュメントには何も見つかりませんでした。
私は何を知りませんか?
cocoa - NSTableView で管理対象オブジェクトにアクセスする
へのNSTableView
バインドがありNSArrayController
、これはNSManagedObjectContext
1 つのエンティティを持つ にバインドされています。テーブル ビューで現在選択されているオブジェクトのプロパティをプログラムで設定するにはどうすればよいですか? 私はそれを直接やってみました
[[[documentsController arrangedObjects] objectAtIndex:[tableView selectedRow]] setObject:[NSDate date] forKey:@"dateProperty"]
しかし、それは私に例外を与えました:
-[_NSControllerArrayProxy selection]: unrecognized selector sent to instance 0x79430c0
テーブル選択を にバインドして値を設定しようとしましたNSObjectController
が、うまくいきませんでした。
cocoa - Cocoa でのキー値の自動監視
KVO と KVC について学ぶにつれて、私は興味を持ちました -
セッターメソッドにアクセスするとき、NSObject はどのように自動 KVO を提供しますか?
setName という名前のアクセサを持つ新しいオブジェクトを作成すると、
誰かが電話をかけたときに、オブザーバーはどのように通知を受けるのですか
[obj setName:@"Mystery"];
フィードバックをお寄せいただきありがとうございます
cocoa - KVC/KVO とバインド: 変更通知が 1 つしか届かないのはなぜですか?
Cocoa の KVC/KVO とバインディングで奇妙な動作が見られます。「コンテンツ」が にバインドされたNSArrayController
オブジェクトがあり、 のプロパティNSMutableArray
のオブザーバーとしてコントローラーが登録されています。このセットアップでは、アレイが変更されるたびに KVO 通知を受け取ることを期待しています。ただし、KVO 通知は 1 回しか送信されないようです。配列が初めて変更されたとき。arrangedObjects
NSArrayController
問題を説明するために、Xcodeで新しい「Cocoa Application」プロジェクトをセットアップしました。これが私のコードです:
BindingTesterAppDelegate.h
BindingTesterAppDelegate.m
出力は次のとおりです。
ご覧のとおり、KVO 通知は初回のみ (およびアプリケーションの終了時にもう一度) 送信されます。なぜこれが当てはまるのでしょうか?
アップデート:
その だけでなく、 myの にバインドする必要があることを指摘してくれたorqueに感謝します。この変更が行われるとすぐに、上記の投稿されたコードが機能します。contentArray
NSArrayController
content
objective-c - バインディングに従ってテーブルビューが更新されない
これは非常に初心者の質問であり、これは私が以前に何度も行ったことですが、今回は欠けていることがあります。
AppDelegate.hファイルで、NSArrayを宣言し、プロパティとして設定します。
次に、awakeFromNibメソッドのAppDelegate.mファイルで、次のように割り当てます。
次に、lines配列を設定するメソッドがあります。
にバインドされた配列コントローラーがあり、AppDelegate.self.lines
次ににバインドされたテーブル列がありますArray Controller.arrangedObjects
。配列が更新されている(NSLogを使用してテストされている)ことを確認できますが、テーブルの内容は更新されていません(空白のままです)。
私がここで見逃している明らかな何かがありますか?
cocoa - 挿入/削除のために NSTreeController のバインドされた CoreData エンティティを観察する
独自のバインド可能なカスタム ツリービューを作成しています。そのために、アイテムの対多関係の更新について NSTreeController を観察したいと思います。NSTreeController は CD 管理オブジェクト コンテキストにバインドされます。すべての深度レベルには、親/子/isLeaf プロパティを持つ独自の CD エンティティがあります。ビュー(およびアイテムの子の順序)で同じ階層を維持する必要があります。何かが挿入されると、その children プロパティの監視を開始します。もちろん、新しく挿入されたオブジェクトのインデックスパスを知る必要があります。
何が挿入/削除されたかを正確に知りたいので、その子への挿入/削除を監視し始めることができます。私が理解しているように、これを行う標準的な方法は、observeValue:forKey... 内の「変更」NSDictionary を調べることですが、変更は NULL です。
これは長年のバグであることは知っていますが、良い回避策はありますか? いくつかの例のビューが配列を保存し、モデルが変更されたときに違いを比較するのを見てきました。ツリービューの場合はより複雑です。また、この方法ではメモリと CPU サイクルが無駄になります。私がテストしている回避策が 1 つあります。それはちょっとうまくいくので、まだ説明しません。
cocoa-bindings - 異なるNSArrayControllersにバインドされた列を持つNSTableView
NSTableViewと2つの列があります。
ご覧のとおり、列はさまざまなNSArrayControllerにバインドされています。最初の列には正しい値が表示されますが、2番目の列には「(」記号が表示されます。ただし、次のように列を入れ替えると、次のようになります。
次に、最初の列(最初の例では2番目)の値が表示され、2番目の列に「(」が表示されます。その動作がわかりません。2つのアレイコントローラーを1つのテーブルにバインドするにはどうすればよいですか?
cocoa - NSTableView で編集可能な NSSecureTextFieldCell でバインディングを使用する方法はありますか?
いくつかの列を持つ があり、そのうちの 1 つは をとしてNSTableView
使用するように設定されています。このテーブルにデータを提供するために適切に構成された を使用しています。NSSecureTextFieldCell
dataCell
NSArrayController
問題は、セキュリティで保護されたテキスト フィールドが機能しないことです。保持する文字列に適切な数のドットが表示されますが、編集できません! セキュア テキストを変更できません。
念のため、通常の で同じことを行いましたがNSTextFieldCell
、すべてが魅力的に機能します。バインディングが適切に設定されており、列が編集可能に設定されています。
Apple の開発者メーリング リストで同じ問題への参照を見つけることができましたが、そこに投稿された回避策は 2006 年のものです。
この特定の問題に対する修正はありますか?
または、おそらくバインディングの使用を引き続き許可する
、より良い回避策を誰かが持っていますか?
cocoa - MacOSX上のCocoaアプリケーションアーキテクチャ
長い間iPhoneの仕事をしていたので、MacでのCocoa開発に戻ってきました。MacでのCocoaでの私の以前の経験は、ちょっとした小さなツールでした。何か真面目なものを作りたいと思っています。
iPhoto(またはMailまたはThingsなど)のような最新のCocoaアプリケーションを見ると、多くのアプリはシングルウィンドウ、ソースリストベースのアプローチを使用しています。それは良い経験を提供するように思われるので、私はできる限りその周りに頭を包み込もうとしています。しかし、私は少し問題を抱えています。これが私がどのように見えるべきだと思うかですが、私は他の人がそれをどのようにやっているのか、そして本当に最良の方法は何であるか疑問に思っています:
アプリの開始点はAppDelegateオブジェクトであり、起動後、ペン先からWindow [Controller?]を作成し、そのデータをセットアップします(たとえば、CoreDataから)
WindowControllerは、基本的にNSSplitViewを含むウィンドウをロードします。
分割ビューの左側には、SourceListスタイルを持つように設定されたNSTableViewまたはNSOutlineViewがあります。
右側には、テーブルビューのどのアイテムが選択されているかに応じて、アプリのメインコンテンツが表示されます。
どこかに(どこに?)右側に表示されるさまざまなビューのそれぞれを管理するNSViewControllersがあると思います(iPhotoにすべての写真、イベント、顔、場所などがあり、それらはすべて異なるペン先に表示される可能性があると思います) ... これは正しいです?)。
これらのビューコントローラは、おそらく左側のソースリストにバインドされています。これはどのように機能しますか(ソースリストはNSViewControllersのNSArrayControllerによってサポートされている可能性がありますか?)。
とにかく、それは私の考えです、私は完全にオフベースですか...?私はウェブを見回し、この投稿をここで見つけました。そして、いくつかのAppleソースコードを見ましたが、頭を包み込むことができないようです。どんな指導も歓迎します。
cocoa - KVO - ストレージからオブジェクトを取得して編集用に表示する際の問題
KVO に問題があり、それが何であるのかわかりません。
レコードの編集または作成に使用できる画面があります。そのレコードは、NSString 型の多数の変数を保持するモデル オブジェクトによって表されます。
その文字列のコントローラーには、現在作業中のモデルを保持するインスタンス変数があります。ウィンドウを開いて新しいレコードを作成すると、管理対象オブジェクト コンテキストに新しいエンティティが作成され、新しく作成されたエンティティがそのインスタンス変数に割り当てられ、ウィンドウが表示されます。問題ありません。
NSManagedObject から継承しているため、モデル オブジェクトの一部のフィールドで手動通知を使用しています。
しかし、レコードを編集しようとすると (Core Data からフェッチして同じことを行うと)、次のエラーが表示されます: [ addObserver:forKeyPath:options:context:] はサポートされていません。キーパス: ユーザー名
オブジェクトの NSLogging は、そのオブジェクトが正しいタイプであることを示しています。手がかりはありますか?