NSDictionary
でいっぱいのNSArray
があります。この構造はデータベースから構築されます。私はデバッグ時にのみ含まれ、実行される検証機能を構築しています。アイデアは、すべてのファイルが実際に含まれていることを確認し、余分なファイルが含まれていないことを確認することです。NSDictionariesのNSArrayを検索して情報を確認する
this質問に基づいて、私はNSPredicate
を使用しようとしましたが、thrディレクトリのすべてのファイルに "File not in Database"というフラグを付けました。
私は間違っていますか?
KEY_DFILE
は、@"dFilename"
として定義されています。
#ifdef DEBUG
- (void)checkItems
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSLog(@"-------- Database/File Check --------");
for (NSDictionary* item in self.allItmes)
{
// ansi items
if ([[item objectForKey:KEY_TYPE] isEqualToString:@"ansi"])
{
// Make sure the datafile exists
NSString* path = [[NSBundle mainBundle] pathForResource:[item objectForKey: KEY_DFILE] ofType:nil inDirectory:@"ansi"];
if (![fileManager fileExistsAtPath:path])
NSLog(@"Can't find file: %@", path);
}
}
NSString *dir = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"ansi"];
NSDirectoryEnumerator* en = [fileManager enumeratorAtPath:dir];
NSString* file;
while (file = [en nextObject])
{
NSPredicate *p = [NSPredicate predicateWithFormat:@"%@ == %@", KEY_DFILE, file];
NSArray *matchedDicts = [self.allItmes filteredArrayUsingPredicate:p];
if ([matchedDicts count] == 0)
{
NSLog(@"File not in Database: %@", file);
}
else if ([matchedDicts count] > 1)
{
NSLog(@"File in Database more than once: %@", file);
}
}
NSLog(@"---------------------------------------");
}
#endif