問題タブ [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.
iphone - カスタム UITableViewCell および CoreData での KVO の使用
KVO に関する大量のドキュメントとチュートリアルを読みましたが、自分のアプリケーション用に抽象化できたものは見つかりませんでした。カスタム UITableViewCell クラスを使用して、オプションのオン/オフを切り替えるためのインターフェイスを提供するテーブル ビューがあります。セルには、モデルのブール プロパティに「バインド」したい UISwitch があります。セルがレンダリングされるときに、コントロールの on プロパティを管理対象オブジェクトに適切に設定する必要があり、そのスイッチ コントロールを切り替えると、モデル オブジェクトが新しい値に更新されることを望みます。
私はそれに取り組み始めましたが、私が適切だと思ったものの最初のステップは機能していません.
cocoa - NSSlider のようなカスタム コントロールの適切な KVO 動作を保証するにはどうすればよいですか?
NSSlider に似たカスタム コントロールがあるとしますが、単一の値ではなく、値の範囲の選択をサポートしているとします。プロパティの明らかな選択は、minValue、maxValue、leftValue、rightValue、または任意の名前です。
また、おそらく leftValue と rightValue が常に minValue と maxValue の間にあることを確認することもできます。minValue と maxValue についても同じです。たとえば、maxValue を現在の rightValue よりも低い値に設定するなどして、既存の leftValue と rightValue を潜在的に無効にすることは望ましくありません。
これまでのところかなり簡単です。
ただし、適切な KVO アクセシビリティ/コンプライアンスを確保する場合はどうしますか? KVO が適切な順序でプロパティを設定することを保証することはできません (つまり、最初に最小制限と最大制限を設定し、次に他の値を設定します)。
私はたまたまそのようなUI要素を持っていて、誤って設定された値のドアを開けずにこれを実行するために熱く理解することはできません.
カスタム コントロールは、モデル オブジェクトにバインドされることを意図しています。このようなモデルを値(最小: 0.00 最大: 42.00 左: 14.00 右: 28.00)で作成すると、カスタム コントロールで次のように設定されます(最小: 0.00 最大: 42.00 左: 1.00 右: 1.00)。
これは、minValue と maxValue を最初に呼び出す代わりに、leftValue と rightValue を最初に呼び出し、両方の値が 1.0 (デフォルトの maxValue) になるためです。(その後、maxValue が適切な値に設定されます。)
Apple が Cocoa のソースを公開していればよかったのにと思うのは、このようなときです。または、より詳細な検査のための少なくともいくつかのコントロール。
そのような制御をどのように実装しますか?
または、より一般的な: KVO に準拠しながら、相互に依存するプロパティを持つクラスを実装するためのベスト プラクティスは何ですか?
iphone - コアデータ、KVO、およびNSInternalInconsistencyException
Core DataとKVOを使用して、データストアへの保存をトリガーする値の変更を探しています。検索がに接続されたテーブルビューがありますNSFetchedResultsController
。検索が変更されると、検索ボタンを押すと新しい結果コントローラーが作成されます。ユーザーが結果テーブルビューでアイテムを選択すると、ユーザーは詳細ビューに入り、編集を行うことができます。
これは私が問題に遭遇するところです。ユーザーが私が行った別のUIControlに変更を加えると、詳細ビューに通知されNSFetchedResultsController
、テーブルビューがビュースタックに私をプッシュしたときから記憶しているビューを使用して、を取得NSManagedObjectContext
して保存できます。そうすると、次のエラーが発生することがあります。
これは、検索を実行して、テーブルの一番上にないオブジェクトを一番上に移動したときに発生する傾向があることがわかりました。頭の後ろで何が悪いのか漠然と知っていますが、これを修正する方法についてのアドバイスをいただければ幸いです。
cocoa - Key Value Observing と NSButton の状態
チェックボックスのステータスを観察し、チェックボックスのステータスが変更されたときにアプリで適切な変更を加えようとしています。チェックボックスを使用してウィンドウを管理するウィンドウマネージャーでは、次のオブザーバーのセットアップがあります。
また、ウィンドウ内の適切なチェックボックスに myCheckBox をファイル所有者 (ウィンドウ コントローラー) に接続しました。ただし、アプリを実行するとobserveValueForKeyPath:ofObject:change:context:
メソッドが呼び出されることはありません。
私は何を間違っていますか?
iphone - NSNotification の bool の登録
私は NSNotification に頭を悩ませようとしていますが、それを機能させることができないようです。通知の登録方法を誤解していると思います。
接続マネージャー クラスのプロパティとして bool があります。初期化時に、いくつかのサーバーで認証を行い、外部 URL にアクセスできるかどうかを確認します (アプリは主に会社のイントラネットで使用され、外部接続は常に可能とは限りません)。
接続にアクセスできない場合、BOOL プロパティは YES から NO に変更されます。これはいつでも応答できるため、変更されたときに通知を登録するのが最善であると考えました。プロパティは externalConnectionAvailable と呼ばれます
メソッドがあります:
しかし、これは呼び出されません。私は何か完全に間違っていますか?
ありがとう
objective-c - willChangeValueForKey: と didChangeValueForKey: を呼び出す必要がありますか?
家庭料理の @property セッターは次のようになるはずだと思いました。
しかし、私よりもはるかに長く Cocoa を使用している人々によるブログ投稿で、次のような多くのコードを目にします。
私の質問は、KVO 通知メソッドを呼び出す必要があるかどうかです。それとも、最新のランタイムを使用している場合、プライベート iVar を更新するときに魔法のように行われているのでしょうか?
cocoa - KVOの問題「オブザーバーを削除できません」
Core Data オブジェクトにリンクされた NSArrayController があり、コンテンツの自動再配置に設定され、述語によってフィルター処理されています。関係を無効にして別の関係を割り当てようとするまでは、すべて問題ありません。その時点で、アプリケーションがクラッシュし、次のエラーが表示されます。
オブジェクトからキー パス「career.type」のオブザーバーを削除できません。おそらく、適切な KVO 通知が送信されずにキー「career」の値が変更されたためです。Person クラスの KVO 準拠を確認します。
スヌーピングから、NSArrayController をコンテンツの自動再配置に設定すると、この問題が発生するようです。しかし、NSArrayController を手動で再配置する必要なく、問題を解決しようとしています。エラーを引き起こしている疑似コードは次のとおりです。
私の NSArrayController が使用している述語は次のとおりです。
両方のインスタンスの %@ は CoreData オブジェクトです。
基本的に、NSArrayController には object.career.type にオブザーバーが設定されているように見えますが、関係を無効にすると、そのオブザーバーが自動的に削除されるときに問題が発生します。だから、私はこれについて間違った方法をとっているのかと思っていますか?オブジェクトのコピーを取得し、MOC から削除して、キャリアを nil に設定し、それに応じてフィールドを設定して再挿入する必要がありますか?
型が無効化されたことをオブザーバーに正しく通知するにはどうすればよいですか? ここで言及されているすべての属性と関係は、通常の KVO 準拠の getter/setter を使用していることに注意してください。
iphone - KVO と NSNotifications のパフォーマンス速度は?
Key-Value Observations (KVO) と NSNotifications の使用を恐れるべきですか? 私は自分のアプリでそれらを使い始めていますが、アプリ全体の呼び出しをトリガーしたり、自動的に何かを実行したりする可能性のあるものの概念に少し慣れておらず、そのようなオーバーヘッドがもたらすパフォーマンスへの影響を少し恐れています.
私の懸念は根拠のないものですか?他のメソッド呼び出しと同じように使用する必要がありますか? とても便利そうで、隙間がたくさん埋まっているので、できれば使ってみたいです。注: 私は主に iOS デバイス向けにプログラミングしているので、パフォーマンスは常に気になります。
iphone - NSArray で観察するキー値
SO でキー値観測をNSArray
(または) で使用する例を調べましたが、(私が慣れていないのとは異なりNSMutableArray
) を使用する必要があるようですが、これを行う方法の具体的な例は見つかりませんでした。誰かサンプルコードで説明できますか?NSArrayController
KVO
たとえば、プレイヤー名をofGameModel
で表す があるとします。これらの文字列を観察して (View Controller がモデルのデータを観察します)、ビュー内のさまざまなものを更新したいと考えています。NSArray (playerNameArray)
NSStrings
プレイヤー名の配列が変更されたという通知を受け取るにはどうすればよいですか?
EDIT:iOS SDKはサポートしていNSArrayController
ますか?そうでない場合、別の方法はありますか?
objective-c - KVOがモデルセッターから起動されたときにobserveValueForKeypathが再帰的に再入力されないようにする
私には、変化を監視するモデルがたくさんあります。セッターがトリガーされると、モデル内のオブザーバーが呼び出され、そのモデル内でWebサーバーを呼び出して、Webサーバー内の情報を更新し、必要なデータが正しく含まれるようにします。
ただし、Webサーバーへの呼び出しで、接続の切断、サーバーのリセットなど、更新が許可されなかったというエラーをサーバーに返すことができます(たとえば、別のユーザーによって変更された他のパラメーターによって更新が妨げられた)。
切断されたデータストアの喜び...
self
KVOアクションを再トリガーせずに更新(つまりモデル)できる方法はありますか?
応答が返されたらオブザーバーをオフにすることもできますが、バックグラウンドサーバー要求の実行中に、同じオブジェクトに対する別のユーザーアクションが可能です。これにより、他の呼び出しが中断されます。
そもそも観測を行うために私がやろうとしていたことの説明と、完全なモデルのコード例については、こちらの投稿を参照してください。
私が電話をかけている部分は、次のようにオブザーバーになります。
あなたたちはいつもいくつかの良いアドバイスをやってきたようです、そして私はあなたが持っているかもしれないどんな提案にもいつも感謝しています。