我创建了 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];
}
}
在此先感谢,戴夫。