2012-04-07 10 views
0

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 

答えて

0

変更この行:これに

NSPredicate *p = [NSPredicate predicateWithFormat:@"%@ == %@", KEY_DFILE, file]; 

NSPredicate *p = [NSPredicate predicateWithFormat:@"%K == %@", KEY_DFILE, file]; 

% Kは、引数が(それはそれを引用しません)ダイナミックプロパティ名ではなく文字列であることを述べています。

1

"%K ==%@"としたいと思います。

関連する問題