前者はKVC Prog Guideに記述されていますが、Snow Leopard用のXcode 4.0.2(iOS 4.3 SDK)がインストールされているiOS APIには、後者が記載されています。 これはiOS 2.0以降です。ありがとう。KVCのvalidattionメソッドを実装するには、override - (BOOL)validateIvar:error:または-validateValue:forKey:error :?
3
A
答えて
3
両方を使用できます。 foo
という名前のキーについて、あなたは具体的な方法
-(BOOL)validateFoo:(id*)ioValue error:(NSError**)error {
...
}
または、非特異的な方法
- (BOOL)validateValue:(id *)ioValue forKey:(NSString *)key error:(NSError **)outError {
if([key isEqualToString:@"foo"]){
...
}else{
return [super validateValue:ioValue forKey:key error:outError];
}
}
を実装するか、ので、あなたは、APIドキュメントでvalidateIvar:error:
を見つけられませんでしたことを完全に賢明ですキーごとにIvar
の部分を変更する必要があります。システムAPIリファレンスで定義したfoo
のキーには、setFoo:
というメソッドがありません。
0
パターンvalidate<Key>:error:
の後にメソッドを実装する必要があります(これはカテゴリでも実行できます)。 validateValue:forKey:error:
を上書きしないで、validateValue:forKey:error:
を検証メソッド内から呼び出さないでください。無限ループが発生します。これは、Key-Value CodingのドキュメントとCore Dataのドキュメント、およびFoundationヘッダーに記載されています。 validateValue:forKey:error:
は、CoreDataのようなフレームワークとアプリケーションの両方について、検証の指定エントリポイントです。
を実行したいコードはカスタム検証方法ではなくvalidateValue:forKey:error:
を直接呼び出す必要があります。
は、例えば:
if ([[self model] validateValue:&text forKey:@"name" error:&validationError]){
[[self model] setValue:text forKey:@"name"];
} else {
[self didFailWithError:validationError];
}
これは、アクセッサメソッド内から実行されないべきです。アクションメソッドはこれを行うのに最適な場所です。
実際の使用例を見ることができますhere
関連する問題
- 1. FirebaseRecyclerAdapterでoverride getItem()メソッドを正しく実装する方法
- 2. 抽象メソッドの実装でoverrideキーワードを使用
- 3. Eclipseが提供するOverride/Implementに似たウィジェットを実装するには?
- 4. Cocoa/Obj-CでKVC用のBOOLをどのようにまとめますか?
- 5. メソッドは、実行時カメラ権限のためにスーパータイプからメソッドをオーバーライドまたは実装しません。
- 6. メソッドは、スーパータイプ@オーバーライドのメソッドをオーバーライドまたは実装しません。
- 7. istringstreamは、メソッドの実装
- 8. Java Override CompareToメソッド
- 9. 実装GetEnumeratorメソッドは、C#で
- 10. Javaメソッドを実装する方法は?
- 11. メソッドは、スーパータイプ(:app:compileDebugJavaWithJavac)からメソッドをオーバーライドまたは実装しません。
- 12. std :: listの実装<bool>
- 13. Moqを使用する場合、実装されたメソッド実装された模擬インターフェイスはありますか?
- 14. は、デフォルトのメソッドの実装は、基本クラスで抽象メソッドを実装するために使用することができます
- 15. PolymerDartメソッドに@overrideを入れる目的は何ですか?
- 16. XNAのテキストにメソッドを実装する
- 17. メソッドは、スーパータイプからメソッドをオーバーライドしたり実装したりしません。
- 18. のUITableViewは、私はこれらのメソッドを実装したボタン
- 19. メソッドgetMessagesを実装する
- 20. メソッドの+実装とは何ですか?
- 21. javaFXでこの@overrideメソッドを取得する方法は?
- 22. Scala.jsプラットフォーム依存メソッドの実装(または依存性注入)
- 23. 真に非同期メソッドを実装する方法は?
- 24. @Overrideはメソッドのためには機能しませんが、他の人のためには
- 25. Java継承:@Overrideメソッドのエラー
- 26. インタフェースは部分的にメソッドを実装できますか?
- 27. android.locationメソッドに関連する@Override注釈を削除します
- 28. 受信機をブロードキャストするためにonkeydownメソッドを実装する方法は?
- 29. InLineFormSetにinitメソッドを実装する
- 30. Eclipseでメソッドを迅速に実装/オーバーライドするには?
もちろんそうです。私は何を考えているのですか?ノービックミス。 –
@Global遊牧民にはまったく問題ありません。ゆっくりと、ひとつずつ学ぶ。良いハッキング! – Yuji
私はそれを考えなかったとは思えません。ありがとう、私自身の一時的な狂気から、おそらく多くの時間を想像上の問題を追いかけて私を救った。 –