問題タブ [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.
objective-c - KVCを介したコレクションへのアクセス(コレクションを保護し、KVOに準拠するため)
Foosの配列を持つクラスTestがあります。ivarを直接公開せずにFoosへのアクセスを提供したいと思います。私はこのKVCを準拠させようとしています(KVO準拠への道を開くためでもあります)。私は持っています:
Test.h
Test.m
クライアントがFooを追加しようとすると、これは無限ループに入ります。
私は何が間違っているのですか?
xml - XML を Core Data オブジェクトに変換するには、どのような手順を実行する必要がありますか?
店舗のリストを含む XML ファイルがあります。簡易バージョンを以下に示します。私が助けてほしいのは、このデータを Core Data のストレージ用のオブジェクトに移動する最も簡単な方法に関するいくつかの高レベルのアイデアです。キーと値のペアに関する提案が表示されますが、以下の例でわかるように、同じ名前/キーを持つ子要素があり、ストア要素ごとに任意の数の子要素が存在する可能性があります。
これらのオブジェクトは、将来の使用のためにアプリ内に保存する予定です (マップ上の注釈になります)。したがって、各重複フィールドを保存する必要があり、そのうちの 1 つでは十分ではありません。私はそれをコアデータでモデル化する方法を知っています.電話番号エンティティと店舗エンティティがあり、に基づいて2つを関連付けるだけ<store-id>
です. 簡単な方法を使用して、他のデータ構造を介して XML から Core Data に移動しようとしています。
XML サンプル:
キーと値のペアを使用する方法がある場合は、重複した要素を説明できる方法を教えてください。別の方法があれば、私はすべての耳です。
ありがとう
cocoa - mutableArrayValueForKeyのKVC検索パターンとは何ですか?
CocoaのKey-Valueコーディング(KVC)メカニズムをもう少しよく理解しようとしています。AppleのKey-Valueプログラミングガイドを読みましたが、特定のKVCメソッドがキーを検索する方法についてまだ少し混乱しています。特に、mutableArrayValueForKey :。
valueForKey:
以下では、 KVCの「ゲッター」が機能することをどのように理解しているかを説明します。次に、mutableArrayValueForKeyに関する質問に行きます。
7つの異なる「ゲッター」KVCメソッドがあります。
プロパティ(myKeyという名前)内の値を検索する場合、AppleのドキュメントにはvalueForKey:が次のように検索されると記載されています。
- 受信機内で、、、および(この順序で)
-getMyKey
試行し-myKey
ます-isMyKey
見つからない場合は、次の順序付けられたto-manyゲッター(NSArray)を試行します。
/li>次に、これらの順序付けられていない多数のゲッター(NSSet)を試行します。
/li>次に、、、、、の順序でが
YES
返されると仮定して、インスタンス変数に直接アクセスしようとします。accessInstanceVariablesDirectly
_myKey
_isMyKey
myKey
isMyKey
最後に、それはあきらめて、受信クラスの
- (id)valueForUndefinedKey:(NSString *)key
メソッドを呼び出します。通常、ここでエラーが発生します。
私の質問は、mutableArrayValueForKeyの検索順序パターンは何ですか?
順序付けられたコレクションのアクセサー検索パターン
mutableArrayValueForKey:のデフォルトの検索パターンは次のとおりです。
受信者のクラスは、名前がパターン-insertObject:inAtIndex:および-removeObjectFromAtIndex:(それぞれ、NSMutableArrayプリミティブメソッドinsertObject:atIndex:およびremoveObjectAtIndex:に対応)に一致するメソッドのペア、またはパターン-insert:atIndexesに一致するメソッドを検索します。 :および-removeAtIndexes:(NSMutableArrayinsertObjects:atIndexes:およびremoveObjectsAtIndexes:メソッドに対応)。少なくとも1つの挿入メソッドと少なくとも1つの削除メソッドが見つかった場合、コレクションプロキシオブジェクトに送信される各NSMutableArrayメッセージは、-insertObject:inAtIndex:、-removeObjectFromAtIndex:、-insert:atIndexes:、および-removeAtIndexes:メッセージの組み合わせになります。 mutableArrayValueForKeyの元の受信者に送信されます:。...等...
「セッター」のような方法について話しているので、これは私には意味がありません。 mutableArrayValueForKey:
NSMutableArrayを返します。上記のすべてのメソッドはvoidを返し、NSMutableArrayを編集するために使用されますが、取得するためには使用されません。例:
Appleが彼らのドキュメントで何を言おうとしているのか、あるいはこれがおそらくエラーであるのかどうか、何か考えはありますか?
私の理論では、KVC値を取得するために検索する場合mutableArrayValueForKey:
と同様のパスをたどる可能性があります。valueForKey:
それが実際にどのような道なのかよくわかりません。
あなたが提供できるどんな助けにも感謝します!:)
objective-c - NSValueはどのように魔法をかけますか?
MVCアプリケーションがあります。モデルには、構造体であるプロパティがありますNSSize
。このように書くことができます:
ビューは、NSSize
Key-Valueコーディングを使用してこれを設定します。ただし、構造体をKey-Valueコード化することはできないため、次のNSValue
ように-objectでラップしました。
私の理解では、アクセサは構造体ではなく構造体を期待しているため、これは機能しないはずNSValue
です。しかし、それは完全に機能します。魔法のように。
これはどのように可能ですか?
objective-c - KVC を MVC に統合するには?
だから私はココアでMVCアプリケーションを持っています。
いくつかのカスタム ビュー、コントローラー、およびモデルがあります。もちろん、ビューはいくつかのことを知る必要があるため、コントローラーからデータを取得します。ただし、コントローラーではアクセサーを使用せず、モデルを直接呼び出すキーパスで KVC を使用します。
これにより、物事が大幅に簡素化され、技術的にも、ビューはまだモデルを直接 (つまり、ポインターで) 知りません。しかしもちろん、彼らは直接アクセスします。
それはKVCとMVCの通常の(または少なくとも賢明な)使用法ですか?
または、この種のコミュニケーションをどのように実装しますか?
objective-c - NSArrayControllerのコンテンツセットを提供するには、何を実装する必要がありますか?
ねえ、
Xcodeで何かを書いています。永続性のためにCoreDataを使用し、ビューとモデルをCocoaBindingsとリンクします。ほぼ通常のCoreDataアプリケーションです。
Xibにアレイコントローラー(NSArrayController)があります。これは、慣例として、そのmanagedObjectContextをAppDelegateにバインドし、エンティティを追跡します。ここまでは順調ですね。
現在、このNSArrayControllerの「コンテンツセット」入札は、別のNSArrayController(otherAc.selection.detailsOfMaster)での選択からのkeyPathによって、そのコンテンツセットを(予想どおりに)制限します。これは、マスターと詳細の関係を実装する通常の方法です。
他のコントロールを使用して、実行時にキーパスを可変的に変更したいと思います。このようにして、他のいくつかのコンテンツセットを含むコンテンツセットを返す必要があります。これらはすべて、InterfaceBuilderを超えた高度なものです。
これを実現するには、代わりにコンテンツセットをAppDelegateにバインドする必要があると思います。私はこれをやろうとしましたが、どのメソッドを実装すればよいかわかりません。KVCメソッド(objectSet、setObjectSet)を作成するだけの場合は、contentSetメソッドでアレイコントローラーのコンテンツセットを提供できます。
ただし、「更新」されないため、これを適切にバインドしているとは思いません。私はバインディングに不慣れです。マスターNSArrayControllerでの選択など、他のものが変更されたときにコンテンツセットを適切に更新するには、何を実装する必要がありますか?
objective-c - CoreDataコンテキストでの予期しないKey-Valueの動作
App Delegateに最初に格納された管理対象オブジェクトエンティティの属性の名前を含む文字列の配列を(キー値コーディングを介して)作成すると、問題なくNSStringの配列を取得できます。その後、コードの同じエントリポイントから同じ呼び出しを行うと、コアデータコンテキストで何も変更されていなくても、同じコレクションがNULLオブジェクトの配列になります。
魅力のない回避策の1つは、文字列配列を毎回再作成することですが、舞台裏で何が起こっているのかを誰かが推測しているのではないかと思います。
cocoa - KVC例外の原因を追跡するにはどうすればよいですか:このクラスは、キーツールバーのキー値コーディングに準拠していませんか?
アプリを実行しようとすると、次のエラーが発生します。
MyViewController
以前は、ペン先IBOutlet
のオブジェクトに接続する「ツールバー」と呼ばれていました。UIToolbar
ツールバーやペン先はもう必要ないと判断したので、プロジェクトから削除しました。しかし、Xcodeはまだ「ツールバー」を参照したいようです。
ペン先を使用しなくなった場合、ツールバーへの参照はどこにありますか?Xcodeをなだめるためにダミーの「ツールバー」プロパティを合成することはできますが、この種の醜いハックは避けたいと思います。
編集:不思議なことに、シミュレーターではなくデバイスでコードを実行したときに例外が発生しませんでした。MyViewController
また、 (ツールバーを含まない)の些細なペン先を使用すると、例外はなくなりました。私はgitを使用しMyViewController
ていますが、ツールバーやペン先があった前からコードの以前のコミットを実行するために戻ったとき、それらも奇妙なことに例外を与えました。そのコードは正常に実行されていました。この例外は、Xcodeとシミュレーター、およびプロジェクトから不要なペン先を削除したときの状態が残っていることと関係があると思います。
iphone - Cocoa で has-many 関係を設定するには?
Cocoa で (非常に) シンプルな FTP アプリを構築しています。サポートされているさまざまな種類のサーバーに関する情報を保存する必要があります。そこで、単一タイプのサーバーに関するすべての関連情報を格納する ServerType クラスを作成しました。次に、作成されたすべての ServerType クラスを管理するように設計された ServerTypes クラスがあります。
私の質問は、2 つのオブジェクト間の関係を設定する方法です。そうするための好ましい方法はありますか?
また、Objective-C は非インスタンス クラスをサポートしていないため、プログラム全体で使用する必要がある ServerTypes のインスタンスをどこで作成すればよいでしょうか? または、それを行うより良い方法はありますか?ServerType プロパティの 1 つを NSPopupBox にバインドできるように、KVC に準拠する必要があります。
私はCocoaとObjective-Cにかなり慣れていません。
iphone - iPhone OS: managedModelObject が Key Value Coding に準拠していないのはなぜですか?
わかりましたので、アプリ用にこの統計トラッカーを作成しようとしています。必要なものすべてを追跡する statTracker というデータ モデル オブジェクトを作成しました。セレクターを使用して値を設定および取得できますが、KVC (つまり setValue: forKey: ) を使用しようとすると、すべてがうまくいかず、StatTracker クラスが KVC に準拠していないと表示されます。
valueForUndefinedKey:]: エンティティ StatTracker は、キー「timesLauched」のキー値コーディングに準拠していません。2010-05-18 15:55:08.573
それをトリガーしているコードは次のとおりです。
これで十分なコードかどうかわかりませんが、さらに必要な場合は、必要なものを教えてください。
KVC を使用できれば、このすべての統計追跡機能を、問題の値の文字列引数を使用して単一のメソッド呼び出しに抽象化できるため、これは非常に便利です。少なくともそれがここで達成したいことです。私は実際に KVC の力を理解していますが、今はそれを機能させる方法を理解しようとしています。
ありがとう!
ニック
出力の下に提案されたコードを追加すると、次のようになります。
オブジェクト: (エンティティ: StatTracker; id: 0x3e1e1b0 ; データ: ) 2010-05-19 11:30:38.173 verses[29526:207] *** 例外 'NSUnknownKeyException' がキャッチされていないため、アプリを終了します。理由: '[ valueForUndefinedKey:] : エンティティ StatTracker は、キー「timesLauched」のキー値コーディングに準拠していません。2010-05-19 11:30:38.174 [29526:207] スタック: (