2

私は、うまく機能しているマスター/詳細UIにバインドされたArrayControllerを持っています。現在、モデル レベルで検証を実装しようとしています。

Apple docsは、個々のプロパティを検証するために次のように動作する必要があることを示しています。

-(BOOL)validateName:(id *)ioValue error:(NSError * __autoreleasing *)outError

したがって、「ProjectName」のモデル プロパティがある場合、次のコマンドが自動的に実行されます。

-(BOOL)validateProjectName:(id *)ioValue error:(NSError * __autoreleasing *)outError

しかし、残念ながら、それは起こりません:(

ただし、興味深いことに、以下のように「すべてをキャッチ」メソッドを使用すると、機能します。

-(BOOL)validateValue:(inout __autoreleasing id *)ioValue forKey:(NSString *)inKey error:(out NSError *__autoreleasing *)outError  {

メソッド内で、どのプロパティが検証されているかを特定するコードを作成できますが、アクセサ メソッドを完全に無視する理由がわかりません。

誰でもこれに光を当てることができますか?

4

1 に答える 1

0

検証メソッドは自動的に起動しません-リンクされたドキュメントから:

一般に、キーと値のコーディングは検証を自動的に実行しません。検証メソッドを呼び出すのはアプリケーションの責任です。

また:

検証メソッドを直接呼び出すことも、validateValue:forKey:error: を呼び出してキーを指定することによって呼び出すこともできます。validateValue:forKey:error: のデフォルトの実装では、名前がパターン validate:error: と一致する検証メソッドをレシーバーのクラスで検索します。そのようなメソッドが見つかった場合、それが呼び出され、結果が返されます。そのようなメソッドが見つからない場合、validateValue:forKey:error: は YES を返し、値を検証します。

これはあなたの2番目の状況を説明しています。

于 2012-09-08T12:51:36.797 に答える