問題タブ [kvc]
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 - 単純な Cocoa バインドが機能しないのはなぜですか?
Cocoa バインディング、KVC、および KVO が頭を悩ませ始めています。私がやりたいことは、NSTextField の値をビュー コントローラーのプロパティの値にバインドすることだけです。誰かが私が間違っているところを教えてもらえますか? どんな助けでも大歓迎です。以下は、私が行っていることの簡略化されたバージョンです。
MyViewController.h:
MyViewController.m:
objective-c - valueForKeyPath が NSInvalidArgumentException をスローするのはなぜですか?
私は他の誰かのコードをデバッグしているので、このコードが何をするのかわからなくても、この時点にたどり着きました。
valueForKeyPath は NSInvalidArgumentException をスローし、次のコードを指定するとアプリがクラッシュします。
公式の KVC ガイドでは、@distinctUnionOfObjects 演算子に関して次のように述べられていることに気付きました。
リーフ オブジェクトのいずれかが nil の場合、この演算子は例外を発生させます。
では、私の特定の例に関して、葉オブジェクトとは何ですか? 具体的にどの葉が nil であるかを追跡するにはどうすればよいですか?
core-data - NSManagedObject のカスタム クラス内でドット構文ゲッターを使用しても問題ありませんか?
一般的に言えば... NSManagedObject クラスでは、特定のフロート動的プロパティのセッターの 1 つ内で、そのセッター内の同じ NSManagedObject の他のフロート動的プロパティにドット構文ゲッターを使用しても問題ありませんか? または、KVC 準拠の CoreData アクセサーを使用する必要がありますか?アクセスされている値の実際のゲッターとは異なるメソッドからのものであっても、値にアクセスするときは? この方法でドット構文を呼び出すと、他のカスタム アクセサーが起動すると思いますが、その中には適切な KVC プリミティブ アクセサーがあるため、これは問題ありません。しかし、ドット構文が単に失敗するか、予測できない結果をもたらすように見えるという奇妙な問題に遭遇したようです。ドット構文を安全でない方法で使用しているという事実が原因であるかどうかはわかりません、またはまだ把握していない他のバグがある場合。
これが私が話していることのコードサンプルです:
cocoa - NSArrayController が配列にバインドされたときに add/remove メソッドが自動的に呼び出されたのはなぜですか?
NSArrayController の仕組みを理解しようとしています...
- 「Person」オブジェクトを保持するために NSMutableArray 「employeeArray」を作成すると。
- GUI で NSArrayController を使用し、「employeeArray」とバインドします。
- 「employeeArray」に「Person」オブジェクトを追加および削除するための 2 つのボタンを追加します。両方のボタンは、NSArrayController の受信アクション「add:」および「remove:」にバインドされます。
- 「employeeArray」で「Person」オブジェクトを追加/削除するときに別のことを行うために、2 つのメソッドを追加します。
- (void)insertObject:(Person *)p inEmployeeArrayAtIndex:(NSUInteger)index;
- (void)removeObjectFromEmployeeArrayAtIndex:(NSUInteger)index;
質問:
- 上記の 2 つのメソッドを NSArrayController に知らせるために何も (コードを記述して) いませんでしたが、追加/削除ボタンをクリックすると自動的に呼び出されるのはなぜですか? どうしたの?
- NSArrayController はどのような追加/削除方法を使用しますか?
- NSArrayController はこれらのメソッドを認識できるほどスマートですか? メソッド名をランダムに変更した場合、正しく呼び出されますか?
ios - コレクション演算子 valueForKeyPath は nil を返します
以下は、コレクション演算子をテストするために使用しているサンプル コードです。
transactionAverage は常に nil を返します。私の側からは小さな間違いのように見えますが、それを特定することはできません。
objective-c - KVC を使用してオブジェクトのプロパティのリストを取得する
このSO 投稿では、選択された回答は以下の構文を使用して、この方法で乗客のリストからfrequentFlyerNumbersのリストを取得します。
NSArray *frequentFlyerNumbers = someFlight.passengers.frequentFlyerNumbers;
乗客が配列であり、コンパイラが配列に入る型を推測できない場合、これはどのように可能ですか?
乗客を実装するときに次のエラーが発生しました。
タイプ「NSMutableArray *」のオブジェクトにプロパティ「frequentFlyerNumbers」が見つかりません
ios - 動的オブジェクトの配列をループする
私がやりたいことを正確に説明する方法がよくわかりません-私ができる最善のことは、例としていくつかのコードを提供することです:
だから私はこれを次のように呼ぶかもしれません
そして、私が書いたかのようにコードが実行されることを期待します
この種の動作を取得する方法はありますか?
ios - コア データ: setPrimitiveValue:forKey: 非常に奇妙な動作
これは謎です:
で呼び出しsetPrimitiveValue:forKey:
ていNSManagedObject
ます。キーは、オブジェクトの正当で永続的なモデル化された属性です。ただし、 setPrimitiveValue:forKey: は失敗し、別の任意の属性の値を設定することがよくあります。setPrimitiveValue:forKey:
ドキュメントによると、モデル化されていないキーを呼び出すときに、この動作が予期されるとのことです。そのため、Core Data はキーがモデル化されていないと考えているようです。
奇妙な部分:
キーが文字列リテラルとしてハードコーディングされている場合、プリミティブ値は実際に正常に設定されます。キーが変数の場合にのみ失敗します。私が使用している変数は、たまたまのkeyPath
引数から渡されますobserveValueForKeyPath:ofObject:change:context:
変数はkeyPath
文字列リテラルと同じです。isEqual:
true を返し、ハッシュ値は等しいです。keyPath
変数の型はです__NSCFString
。なぜsetPrimitiveValue:forKey:
違う振る舞いをするのか誰にも分かりますか?(この動作は OS X 10.9.1 でのものです)
より良い情報を含む更新:
不正なキーは、ディスク上のファイルからロードされた文字列にまでさかのぼります。以下の例は、孤立したケースです。属性文字列「mainAttr」がディスクに書き込まれ、読み戻されると、setPrimitiveValue:forKey:
「mainAttr」ではなく、間違った属性の値が設定されます。
コア データ オブジェクト:
-
ios - restkit を使用して文字列の単純な json 配列を取得するにはどうすればよいですか
私の質問は
RestKit: 文字列の単純な JSON 配列を取得する方法は?
ただし、元の作成者は回答が役立つと感じましたが、私はまだ迷っています。KVC
この質問には 2 つの個別の参照が含まれていますが、どちらも私 (との完全な初心者) を助けるには十分ではありませんでしたRestKit
。
1 つのリファレンスがここにあり、このサンプル コードを示します
あるべきクラスとは何ですか? それはNSStringであるべきですか?それとも、NSArray * である 1 つのプロパティを持つラッパー クラスを作成する必要があることを意味していますか?
@"someAttribute" とは何ですか? 繰り返しますが、これはラッパー クラスを暗示しているのでしょうか。その場合、someAttribute は NSArray * であるラッパー クラスのプロパティの名前になりますか?
もう 1 つの参照はhereであり、配列から「ラッパー クラス」へのフェッチを示していますが、ラッパー クラスには配列ではなく NSNumber が 1 つしかありません。そのため、その例を配列全体を取得するために機能するものに変える方法は明確ではありません。
参考までに、サーバーは元の質問と同じように文字列の配列を返しています: ["string1", "string2", "string3"].
アップデート
これが私が試みたコードです。ラッパークラスを作成しました。
マッピングは次のとおりです。
そして、私は呼んでいますgetObjectsAtPathForRouteName
私が得ているのは、CannedReponses
期待どおりの配列です。NSString
ただし、応答プロパティに入れられるのではなく。を取得していRKMappingSourceObject
ます。これで、RKMappingSourceObject
実際に正しい文字列が含まれるようになりました。
コンソールのログを調べて、RestKit
さらに手がかりを収集できるかどうかを確認します。
更新#2
ここで blakewatters が述べたように、この例ではマッピングを行っておらず、 RestKit
. 問題は、私が書いているすべてのコードがサービス層で使用されてRestKit
おり、すべての呼び出しのパターンをやみくもに従っていたことです。この呼び出しの正しい答えは、AFNetworking
直接アクセスする方法を理解することかもしれません。