問題タブ [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.

0 投票する
3 に答える
11853 参照

cocoa - Key-Value-Cocoa での対多関係の観察

NSMutableArray で key-value-observing を機能させようとしています。以下は、監視対象クラスである MyObservee の .h ファイルです。

クラス MyObserver は、observeValueForKeyPath:ofObject:change:context: を実装します。オブザーバーを追加する方法は次のとおりです。

addObject: メッセージが someArray キー パスの変更としてトリガーされないのはなぜですか? ここで私が完全に理解していない何かがあると感じています。

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

cocoa - CoreData-Entities からコードにいくつかの値を取得する方法

CoreData アプリで、いくつかの属性を持つエンティティを作成しました。テーブルビューとバインドされた NSArrayController を想像してください。両方を使用して、エンティティの「インスタンス」を作成 (および編集) します。私の質問は、これらの属性の値をコードに取得する方法です。さらに質問がある場合: http://twitter.com/xP_ablo

0 投票する
5 に答える
6031 参照

iphone - Cocoa Touch でオブジェクトの読み取り専用プロパティを観察することは可能ですか?

UINavigationController の (読み取り専用) visibileViewController プロパティを観察しようとしましたが、成功しませんでした。別のクラスでのテスト目的で自分で定義した readwrite プロパティを正常に観察できました。

読み取り専用属性を観察することは可能ですか?

0 投票する
4 に答える
38312 参照

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 インスタンスを参照することで、アプリ デリゲートで通信メソッドを簡単に実行できることはわかっていますが、この種のことを正しい方法で実行したいと考えています。

次の質問に答えて、「正しいことをする」のを手伝ってください。

  1. UINavigationController スタックに新しいビューコントローラーをプッシュしようとすると、がこのプッシュを行う必要がありますか。 コード内のどのクラス/ファイルが正しい場所ですか?
  2. の UIViewControllerにいるときに、UIViewController の 1 つのデータ (iVar の値) に影響を与えたい場合、これを行う「正しい」方法は何ですか?
  3. オブジェクトに一度に設定できるデリゲートは 1 つだけだとすると、講師が「オブザーバー用の汎用インターフェイス (デリゲートなど) を定義する」と言った場合、実装はどのようになるでしょうか。疑似コードの例は、可能であればここで非常に役立ちます。
0 投票する
1 に答える
282 参照

cocoa - カスタム アクセサーを使用したプロパティの観察

hiddenUIViewのプロパティを観察したいとしましょう:

@property(nonatomic, getter=isHidden) BOOL hidden

キーパスhiddenまたはのオブザーバーを追加しますかisHidden?

0 投票する
4 に答える
5669 参照

cocoa - Interface Builder> Inspector> Bindingsの「ControllerKey」とはどういう意味ですか?

それらのすべてのフィールドとその意味を説明しているドキュメントは見つかりません。特に「コントローラーキー」は私にはわかりません。

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

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

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

cocoa - アレイコントローラーの特定のアイテムにバインドするCocoa

の値を配列内の特定のアイテムにNSArrayControllerバインドするためにを使用することは可能ですか?NSTextField特に、配列の最初の項目のプロパティにバインドし、配列が空の場合は何も表示しないようにします。

shows just "("を使用arrangedObjects.commandすると、アイテムごとにカンマ区切りの文字列を含む複数行の文字列を表示しようとしている可能性があります。最初の文字列が必要です。

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

objective-c - プロトコル オブジェクトでのキー値の監視: addObserver でのコンパイラの警告:

プロパティを持つ単純なプロトコルがあります。

「stops」プロパティへの変更をリッスンするために、キーと値のオブザーバーを別の場所に追加しています。

「停止」プロパティが変更されたときにobserveValueForKeyPathイベントを取得するという点で、コードは期待どおりに機能します。本当に厄介なのは、addObserver 呼び出しでのコンパイラの警告です。

「addObserver」メソッドは、NSObject のカテゴリで定義されています。

XCode でこの警告を削除する方法はありますか? プロトコルがカテゴリを採用できないことは私の理解であるため、宣言をプロトコル自体にコピーする以外に、プロトコルに NSKeyValueObserverRegistration メソッドを組み込む方法がわかりません。これはハックのようです。

これは単なるコンパイラの警告であるという点で、些細な問題であることはわかっていますが、これに対処する「正しい」方法があるかどうかを知りたいと思っています。