Я создал расширение для NSObject, чтобы можно было задавать свойства объекта из данных, содержащихся в PLIST или словаре.Я использовал setValuesForKeysWithDictionary
, но это работает только для ключей, а не keyPaths.Мое расширение делает то же самое, за исключением того, что позволяет PLIST содержать ключевые пути, а также ключи.Например, detailTextLabel.text @ "подробный текст" в качестве пары ключ-значение.
Это работает хорошо, за исключением того, что возможно сбой приложения из-за опечатки в 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];
}
}
Заранее спасибо, Дейв.