所以我终于弄清楚了这件事,所以想与其他人分享以供将来参考。我敢肯定,将来会有其他迷失的灵魂在寻找类似的东西(或者至少我希望:))。
我编写代码的方式是:
- 阅读 NSDictionaries 中的两个 Plist
- 将一个 Plist 视为“待测试”,将另一个 Plist 视为参考(用于比较)以确定其是否通过/失败
- 遍历“待测试”Plist 中的所有键,并比较“参考”Plist 中的每一个键
- 在比较数组或字典时,此检查(这是我一直在努力的部分)必须是递归检查
为步骤 #1、2、3 编写的代码很简单,所以我将给出我为 #4 编写的方法,这是我最初问题的症结所在。
此函数 compareSourceObject() 将采用 3 个参数:
sourceObject
:要测试的对象
targetObject
: 比较对象
trailPath
:字符串,它将保存失败的密钥的整个路径
- (void)compareSourceObject:(id)sourceObject andTargetObject:(id)targetObject with BreadcrumbTrail:(NSString *)trailPath{
NSString *message = [[NSString alloc] init];
if ([sourceObject isKindOfClass:[NSDictionary 类]]){
for(sourceObject 中的 id 项){
[self compareSourceObject:[sourceObject objectForKey:item] andTargetObject:[targetObject objectForKey:item] withBreadcrumbTrail:[trailPath stringByAppendingFormat:@"->%@", item]];
}
}
else if ([sourceObject isKindOfClass:[NSArray class]]){
for (int counter=0; counter %d", counter]];
}
}
否则 if(![sourceObject isEqual:targetObject]){
NSLog(@"值不匹配。\"TestedDicationary\" 中的值是 (%@) 但引用字典有 (%@)", targetObject, sourceObject);
}
}
希望这可以帮助。非常欢迎评论/建议/优化。