問題タブ [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.
ios - オブジェクトを削除すると、mutableArrayValueForKey NSMutableArray がクラッシュする
次のコードでクラッシュが発生しています。self.items
はString 型の属性を持つNSArray
ofです:NSManagedObjects
"id"
クラッシュメッセージは次のとおりです。
デバッガーで出力すると、通常のではなく でallID
あることがわかります。NSKeyValueSlowMutableArray
__NSArrayM
NSMutableArray
だから私はこれに変更し、それは動作します:
NSMutableArray *allIDs = [[self.items valueForKey:@"id"] mutableCopy];
前者をクラッシュさせ、後者を機能させるこれら2つの呼び出しの違いは何ですか? KVO とプロキシ コレクションに関係があるのではないかと思いますが、よくわかりません。
ios - valueForKeyPath は合計の最大値を計算できますか?
次のObjective-Cクラスがあります:
を指定するNSArray
と、次を使用しGraphDataPoint
て最大値を計算する方法を知っていますvalue
value
今、私はの配列に変更したいvalues
:
usingでそれぞれのプロパティの合計の最大値を計算する同様の方法はありますか? (ネストされたループを記述して手動で解決できることは知っています。)value
GraphDataPoint
NSArray
valueForKeyPath
ios - 検証を実行する setXXX メソッドを実装するとどうなりますか?
KVCコンプライアンスの確保に関する
ドキュメントには次のように記載されています。
メソッドの実装では、-set<Key>:
検証を実行しないでください。-validate<Key>:error:
検証がキーに適している場合、クラスは実装する必要があります。
検証を実行する setXXX メソッドの実装
kvo を使用すると、パフォーマンスの問題が発生しますか?
objective-c - KVC は速度とエラーにどのように対処しますか?
私は KVC と Cocoa Scripting について読んでいて、プロパティをどのように使用できるかについて読んでいます。モデル クラスを考えていますが、要素/プロパティ データはインターネットから取得する必要があります。しかし、プロパティと KVC の設計は、高速でメモリ内の取得を想定しているように見えますが、ネットワーク呼び出しは遅くなったり、エラーが発生しやすくなります。これらはどのように調整できますか?
速度を上げるために、「ねじ込みます」と言って待機中のアイコンを投稿するだけですか? (もちろん、待機中に UI が停止しないように、マルチスレッド化を維持する必要があります。)
プロパティが常に利用可能であると想定されているnil
場合は、リソース呼び出しでエラーが発生した場合に設定できます。しかし、詳細を入手する方法はありません。さらに悪いことに、「欠損値」をサポートするプロパティはそれnil
を表し、エラーに使用する予備の状態はありません。
Apple イベントはエラー処理をサポートしていますが、エラーを生成する可能性のあるモデル呼び出しと Apple イベントの間で、KVC レイヤーが (忘却の) フロアにエラーをドロップするため、使用できませんでした。Scripting Bridge API では、設計者がエラーを処理するための秘密のプロトコルを追加したため、この問題が発生しました。
私が間違っている?KVC ベースの設計でエラーを処理する方法はありますか?
補遺
例外について言及するのを忘れていました。Objective-C はそれらをサポートするようになりましたが、それらについて少し読んだところ、C++ のような通常のエラー処理ではなく、「直接クラッシュするのではなく」壊滅的な使用を意図していることを暗示しています。それを除けば、彼らはここで役に立ちました....
objective-c - Objective-C でコレクション アクセサ メソッドを宣言する必要がありますか?
今日は急ごしらえがあります。というクラスがあるとしBSDHistoryManager
ます。History
これは、Web ブラウザー (別名オブジェクト [ window.history
])のような単純な状態履歴レコーダーです。.h/m ファイルの簡単な例を次に示します。
BSDHistoryManager.h
BSDHistoryManager.m
ご覧のとおり、ゲッターでアクセスしたときにコピーされる標準の可変コレクションが内部にあるため、内部が混乱することはありません。この時点で-addState:
、-removeState:
、 などの public アクセサー メソッドをいくつか追加したいと思います。たとえば、次のような独自のアクセサーを作成したいと思います。
ただし、KVC メソッドも定義したいと考えています。ご存知のように、次のようになります。
今では両方を持っています。それは素晴らしいことですが、読みやすく、理解しやすいように、クラスのインターフェイスをきれいに整えたいと考えています。私の質問は: KVC アクセサー パターンを実装する場合、これらのメソッドを宣言する必要がありますか、それともメソッドを実装するだけで「無料」で KVC 準拠を取得できますか? または、より良い質問は次のとおりです。独自のカスタム名のメソッドを作成する場合、KVC メソッドを実装する必要さえありますか?
うまくいけば、これは理にかなっていますが、そうでない場合は、もう少しうまく説明しようとします. 読んでくれてありがとう!
objective-c - スーパークラスの setter を使用すると KVO 通知が送信されない
プロパティを定義する ClassA があります。
実装はアクセサーをオーバーライドしません。
ClassB はセッターをオーバーライドして、追加の作業を行います。
ClassB の別のメソッドでは、追加の作業をスキップするために、スーパー セッターを介してこのプロパティを設定しようとしています。
これを行うと、プロパティの KVO 通知が送信されません。同じことを行って を使用するself
と、KVO 通知は期待どおりに機能します。
何が起きてる?これは予想される動作ですか?そう言い切れるものは見当たりませんでした。
ios - NSMutableDictionary setValue:forUndefinedKey
私はiOSアプリを開発しています。1 つのプロパティを定義する NSObject を拡張するクラスがあります。
このエラーが発生しています。 *キャッチされない例外 'NSUnknownKeyException' が原因でアプリを終了しています。理由: '[ setValue:forUndefinedKey:]: このクラスはキー myUndefinedKey のキー値コーディングに準拠していません。
過去にkvc、kvoにNSMutableDictionaryを使用しました。はい、クラスが kvc に準拠していません。
macos - MKMapAnnotationManager not removing itself as observer for MKAnnotation
I'm still working on this, but figured it was worth asking about:
I have a class that conforms to the MKAnnotation
protocol called AMAnnotation
. This class also implements setCoordinate:
I can successfully add the annotation to a map and I can call setCoordinate:
and the pin will move on the map. But there's a problem. Sometimes, when the map gets deallocated, the program will pause on NSKVODeallocateBreak
with the following message:
I don't add any observers myself, so I overrode the KVO methods on my AMAnnotation
class. It turns out that each time I call setCoordinate:
after the annotation has been added to the map, I see the following:
Now, I don't know what _original_setCoordinate:
is, Google wasn't helpful. And it looks like the MKMapAnnotationManager
re-adds itself as an observer but isn't removing itself.
Sometimes when the map is deallocated, I see that it removes itself multiple times. But other times not at all, which is when the warnings show up.
#xA;Anyone have an explanation for this? Thanks.