問題タブ [key-value-observing]
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 - Key-Value-Cocoa での対多関係の観察
NSMutableArray で key-value-observing を機能させようとしています。以下は、監視対象クラスである MyObservee の .h ファイルです。
クラス MyObserver は、observeValueForKeyPath:ofObject:change:context: を実装します。オブザーバーを追加する方法は次のとおりです。
addObject: メッセージが someArray キー パスの変更としてトリガーされないのはなぜですか? ここで私が完全に理解していない何かがあると感じています。
cocoa - CoreData-Entities からコードにいくつかの値を取得する方法
CoreData アプリで、いくつかの属性を持つエンティティを作成しました。テーブルビューとバインドされた NSArrayController を想像してください。両方を使用して、エンティティの「インスタンス」を作成 (および編集) します。私の質問は、これらの属性の値をコードに取得する方法です。さらに質問がある場合: http://twitter.com/xP_ablo
iphone - Cocoa Touch でオブジェクトの読み取り専用プロパティを観察することは可能ですか?
UINavigationController の (読み取り専用) visibileViewController プロパティを観察しようとしましたが、成功しませんでした。別のクラスでのテスト目的で自分で定義した readwrite プロパティを正常に観察できました。
読み取り専用属性を観察することは可能ですか?
objective-c - ビューコントローラー間で通信する最良の方法は何ですか?
Objective-C、ココア、iPhone 開発全般に不慣れな私は、言語とフレームワークを最大限に活用したいという強い願望を持っています。
私が使用しているリソースの 1 つは、Web 上に残されているスタンフォード大学の CS193P クラス ノートです。講義ノート、課題、サンプル コードが含まれており、このコースは Apple 開発者によって提供されたものなので、間違いなく「馬の口から」だと思います。
クラスのウェブサイト:
http://www.stanford.edu/class/cs193p/cgi-bin/index.php
講義 08 は、UINavigationController スタックにプッシュされた複数の UIViewController を持つ UINavigationController ベースのアプリを構築する課題に関連しています。これが UINavigationController の仕組みです。それは論理的です。ただし、このスライドには、UIViewController 間の通信に関するいくつかの厳しい警告があります。
この深刻なスライドから引用します:
http://cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf
ページ 16/51:
データを共有しない方法
- グローバル変数またはシングルトン
- これには、アプリケーション デリゲートが含まれます
- 直接的な依存関係により、コードの再利用性が低下します
- デバッグとテストがより困難
Ok。私はそれでダウンしています。ビューコントローラー間の通信に使用されるすべてのメソッドをやみくもにアプリデリゲートに投げ込み、アプリデリゲートメソッドでビューコントローラーインスタンスを参照しないでください。公正な「ナフ。
もう少し進むと、このスライドで何をすべきかがわかります。
ページ 18/51:
データ フローのベスト プラクティス
- 何を伝える必要があるかを正確に把握する
- ビュー コントローラーの入力パラメーターを定義する
- 階層をバックアップする通信には、疎結合を使用します
- オブザーバー用の汎用インターフェースを定義する (委譲など)
このスライドの後には、講師が UIImagePickerController の例を使用してベスト プラクティスを明らかに示すプレース ホルダー スライドのように見えるものが続きます。動画があればいいのに!:(
わかりました、それで... 残念ながら、私の objc-fu はそれほど強力ではありません。また、上記の引用の最後の行にも少し混乱しています。私はこれについてかなりの割合でグーグル検索を行ってきましたが、観察/通知技術のさまざまな方法について話しているまともな記事のように見えるものを見つけました:
http://cocoawithlove.com/2008/06/five-approaches-to -listening-observing.html
メソッド #5 はデリゲートをメソッドとして示しています! ただし、オブジェクトは一度に 1 つのデリゲートしか設定できません。では、複数のビューコントローラー通信を行う場合、どうすればよいでしょうか?
わかりました、それがセットアップ ギャングです。appdelegate の複数の viewcontroller インスタンスを参照することで、アプリ デリゲートで通信メソッドを簡単に実行できることはわかっていますが、この種のことを正しい方法で実行したいと考えています。
次の質問に答えて、「正しいことをする」のを手伝ってください。
- UINavigationController スタックに新しいビューコントローラーをプッシュしようとすると、誰がこのプッシュを行う必要がありますか。 コード内のどのクラス/ファイルが正しい場所ですか?
- 別の UIViewControllerにいるときに、UIViewController の 1 つのデータ (iVar の値) に影響を与えたい場合、これを行う「正しい」方法は何ですか?
- オブジェクトに一度に設定できるデリゲートは 1 つだけだとすると、講師が「オブザーバー用の汎用インターフェイス (デリゲートなど) を定義する」と言った場合、実装はどのようになるでしょうか。疑似コードの例は、可能であればここで非常に役立ちます。
cocoa - カスタム アクセサーを使用したプロパティの観察
hidden
UIViewのプロパティを観察したいとしましょう:
@property(nonatomic, getter=isHidden) BOOL hidden
キーパスhidden
またはのオブザーバーを追加しますかisHidden
?
cocoa - Interface Builder> Inspector> Bindingsの「ControllerKey」とはどういう意味ですか?
それらのすべてのフィールドとその意味を説明しているドキュメントは見つかりません。特に「コントローラーキー」は私にはわかりません。
cocoa - 計算値に基づく計算値の KVO の設定
したがって、Invoice と InvoiceLineItem の 2 つのオブジェクトがあります。InvoiceLineItem には と呼ばれるプロパティがcost
あり、他のプロパティに基づいて動的に作成されます。私が使用するKVO /バインディングを支援するには:
これはうまくいきます。serivceCost のようなプロパティを編集すると、テーブル ビューのメイン コストが正常に更新されます。
Invoice オブジェクトには、InvoiceLineItems の NSMutableArray があります。Invoice には と呼ばれる同様のプロパティがありますtotalCost
。これは、明細項目を繰り返し処理することによって計算され、明細項目が削除済みとしてマークされていない限り (同期の理由でこれを行っています)、コストを合計して totalCost を作成します。
今私の質問/問題。項目のコストの 1 つが変更されたときに KVO/バインディングで機能するように、Invoice の totalCost を設定するにはどうすればよいですか?
設定してみました:
しかし、うまくいきません。コンソールに次のエラーが表示されます。[<NSCFArray 0x1499ff40> addObserver:forKeyPath:options:context:] is not supported. Key path: cost
cocoa - アレイコントローラーの特定のアイテムにバインドするCocoa
の値を配列内の特定のアイテムにNSArrayController
バインドするためにを使用することは可能ですか?NSTextField
特に、配列の最初の項目のプロパティにバインドし、配列が空の場合は何も表示しないようにします。
shows just "("を使用arrangedObjects.command
すると、アイテムごとにカンマ区切りの文字列を含む複数行の文字列を表示しようとしている可能性があります。最初の文字列が必要です。
objective-c - プロトコル オブジェクトでのキー値の監視: addObserver でのコンパイラの警告:
プロパティを持つ単純なプロトコルがあります。
「stops」プロパティへの変更をリッスンするために、キーと値のオブザーバーを別の場所に追加しています。
「停止」プロパティが変更されたときにobserveValueForKeyPathイベントを取得するという点で、コードは期待どおりに機能します。本当に厄介なのは、addObserver 呼び出しでのコンパイラの警告です。
「addObserver」メソッドは、NSObject のカテゴリで定義されています。
XCode でこの警告を削除する方法はありますか? プロトコルがカテゴリを採用できないことは私の理解であるため、宣言をプロトコル自体にコピーする以外に、プロトコルに NSKeyValueObserverRegistration メソッドを組み込む方法がわかりません。これはハックのようです。
これは単なるコンパイラの警告であるという点で、些細な問題であることはわかっていますが、これに対処する「正しい」方法があるかどうかを知りたいと思っています。