だから私はついにこのことを理解したので、将来の参考のために他の人と共有することを考えました。将来、似たようなものを探している他の失われた魂があると確信しています(または少なくとも私は願っています:))。
私がコードを書いた方法は次のとおりです。
- NSDictionariesの両方のPlistを読む
- 1つのPlistを「テスト対象」として扱い、もう1つのPlistを(比較するための)参照として扱い、合格/不合格かどうかを確認します。
- 「テスト対象」Plistのすべてのキーをループし、「参照」Plistの各キーを比較します
- 配列または辞書を比較する場合、このチェック(これは私が苦労していた部分です)は再帰的なチェックでなければなりませんでした
ステップ1、2、3で作成するコードは単純なので、元の質問の核心である#4で作成したメソッドを示します。
この関数compareSourceObject()は、次の3つの引数を取ります。
sourceObject
:テストするオブジェクト
targetObject
:比較するオブジェクト
trailPath
:失敗したキーのパス全体を保持する文字列
-(void)compareSourceObject:(id)sourceObject andTargetObject:(id)targetObject withBreadcrumbTrail:(NSString *)trailPath {
NSString * message = [[NSString alloc] init];
if([sourceObject isKindOfClass:[NSDictionary class]]){
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]];
}
}
else if(![sourceObject isEqual:targetObject]){
NSLog(@"値が一致しません。\"TestedDicationary\ "の値は(%@)ですが、参照dictには(%@)"、targetObject、sourceObject);があります。
}
}
お役に立てれば。コメント/提案/最適化は大歓迎です。