PLISTまたは辞書に含まれるデータからオブジェクトプロパティを設定できるように、NSObjectの拡張を作成しました。私はsetValuesForKeysWithDictionary
を使用しましたが、これはkeyPathsではないキーに対してのみ機能します。私の拡張は同じことをしますが、PLISTにキーとキーの両方を含めることができます。たとえば、detailTextLabel.text @「詳細テキスト」をキー値のペアとして指定します。setValueForKeyPathの堅牢性を改善する
PLISTのタイプミスのためにアプリがクラッシュする可能性があることを除いて、これはうまくいきます。たとえば、プロパティ名が存在するが予想外のタイプ(文字列の代わりに数字)の場合はクラッシュします。これらのタイプのエラーを避けるために、これをより堅牢にし、防御的にコードを作成する最良の方法は何ですか?
私のオブジェクトには既に- (void) setValue:(id)value forUndefinedKey:(NSString *)key {}
が使用されていますが、実際のキーには対応していない項目をPLISTにトラップしています。
#pragma mark -
#pragma mark Extensions to NSObject
@implementation NSObject (SCLibrary)
- (void) setValuesForKeyPathsWithDictionary:(NSDictionary *) keyPathValues {
NSArray *keys;
int i, count;
id key, value;
keys = [keyPathValues allKeys];
count = [keys count];
for (i = 0; i < count; i++)
{
key = [keys objectAtIndex: i];
value = [keyPathValues objectForKey: key];
[self setValue:value forKeyPath:key];
}
}
おかげさまで、Dave。