問題タブ [key-value-coding]
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 - オブジェクトがキー値コーディングに準拠していないのはどのような状況ですか?
現在、キー値コーディングに関するすべてのことを学んでいます。
ドキュメントで彼らは言う:
適切なキーのキー値コーディングに準拠していないキー パス シーケンス内のオブジェクトは、valueForUndefinedKey: メッセージを受け取ります。
オブジェクトがキー値コーディングに準拠していない状況を想像してみてください。どうしてそれが起こり得ますか?UIView をサブクラス化すると、明らかに準拠していますよね? しかし、スーパークラスとして NSObject を使用して独自のオブジェクトを作成すると、どうなるでしょうか? そして、スーパークラスのないクラスを作成すると、これは kv に準拠していませんか?
iphone - オブジェクト プロパティにアクセスするときに、単純なドット構文ではなく KVC を使用する必要があるのはなぜですか?
レシーバークラスが NSKeyValueProtocol に準拠している場合、長い道のりを歩むオプションがあります。
または短い方法:
この KVC メソッドのポイントは何ですか? これはいつ役に立ちますか?
objective-c - NSDictionary setValue:
わかりました、これは私を狂わせています - 私が正気ではないことを教えてください!
私は宣言する:
私は私の.h
私は初期化します:
ビューに表示されます
私は設定しました:
メソッドで:
そして、「NSMutableDictionary が setValue:forkey: に応答しない可能性があります」というメッセージが表示され、実行時にアプリがクラッシュします。
助けてください :(
objective-c - NSPredicatesでのキーパスの使用
(私のカスタム)GTPersonオブジェクトを含むNSDictionaryがあります。GTPersonには、NSMutableSet *parents
私が使用する属性とが@property
あり@synthesize
ます。
NSDictionaryから、親を持たない、つまり親の数が0であるすべてのGTPersonオブジェクトをフィルタリングしたいと思います。
私は次のコードを使用しています:
これを実行すると、次のエラーが発生します。
[<GTPerson 0x18e300> valueForUndefinedKey:]: this class is not key value coding-compliant for the key count.
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<GTPerson 0x18e300> valueForUndefinedKey:]: this class is not key value coding-compliant for the key count.'
属性count
ではなくGTPersonを呼び出そうとしているのはなぜですか?parents
objective-c - Objective-C で Key-Value コーディングを使用して定数にアクセスする
定数が多いプログラムを作っています。それらをすべて別のクラスに入れることにし、それを必要とするクラスごとにインポートしています。ファイルは次のようになります
私がやろうとしているのは、キー値コーディングを使用してそれらにアクセスすることです。私がこれまでに試したことはうまくいきませんでした。
しかし、私は次のことを行うことができ、正常に動作します。
これは無意味に思えるかもしれませんが、「CostForBuilding」で終わる必要がある変数がたくさんあり、これを必要とする関数は文字列の最初の部分のみを取得します。例、「base」、「max」、「intermediate」など。その後、「CostForBuilding」などと組み合わせて変数名を取得します。
これが可能であれば、正しい変数にアクセスするために複数の if ステートメントを使用する代わりに、1 行または 2 行のコードのみを使用する方がはるかに優れています。これを行う方法を知っている人はいますか?前もって感謝します。
core-graphics - ココアバインディングとCGColorRefを使用したKVC
CGColorRef
オブジェクトの1つをの" shadowColor
"プロパティにバインドしようとしていますCALayer
。残念ながら、私はこれを理解することができませんでした-それはおそらく本当に単純なものです!
CGColorRefはプロパティとして実装されます。
私のバインディングも簡単です:
私が動けなくなっているのはvalueForUndefinedKey:
-これをどのように実装すればよいのでしょうCGColorRef
か?私は現在、定型文を取得しています:
NSColor
両端にプロパティを配置し、色が変更されるたびに手動でCALayer
's " "を設定することでこれを回避できますが、それはエレガントではないようです。shadowColor
iphone - キーバリューの方法-CALayerの回転を観察しますか?
私はこのような値にアクセスできます:
しかし、何らかの理由で、そのキーパスをKVで監視しようとすると、コンパイラエラーが発生します。まず、これが私がそれをやろうとする方法です:
コンパイラは私に言います:
***キャッチされなかった例外'NSUnknownKeyException'、理由:'[addObserver:forKeyPath:@ "rotation.z" options:0x0 context:0x528890]が原因でアプリを終了し、「ローテーション」がKVCに準拠していないオブジェクトに送信されました財産。'
私が得られないのは、なぜKVCキーパスでそのz値にアクセスできるのに、オブザーバーを追加できないのかということです。これは意味がありますか?
その行列のz値を他にどのように観察できますか?マトリックスの他の値は気にしません。z回転のみ。アクセスして観察する他の方法はありますか?
iphone - KVOロック。非同期で使用するにはどうすればよいですか?
私は KVO で売られていますが、明らかな方法で使用されている場合、それは同期的です。多くの KVO メッセージを立て続けに送信し、KVO メッセージの処理中にアプリが停止する状況で使用したいと考えています。NSOperation
おそらくorを使用して、ここで機能するアプローチを誰かが提案できますかNSThread
?
私の目標は、可能であれば KVO の分離された柔軟性を維持することです。
uiview - UIView の ivar のキー値コーディング
フレームの変更またはアフィン変換によって UIView が変更されたときに、いくつかのメソッドを実行することに興味があります。私の最善のアイデアは、次の値の変化を観察することでこれを行うことです。
myView.frame
と myView.transform
。
ただし、UIViews のビュー部分は Key-Value 準拠ではありません。幸いなことに、ビューのモデル部分である CALayer がそうです。だから私は次のようにセットアップします:
ビューの viewDidLoad: 部分。「フレーム」キーについても同じことを行いました。ただし、スーパー ビュー内でビューを移動するか、アフィン変換によってビューが変更されると、メソッドは次のようになります。
呼び出されることはありません。何を与える?UIViews フレームと変換の変更を観察するより良い方法はありますか?
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