0

私はNSMutableArrayオブNSMutableDictionary(それはplistです)を持っています。配列内の各ディクショナリには、' id' と ' lu' の 2 つのキーがあります。

たとえば、= '47653'のインデックスNSMutableArrayを見つけるにはどうすればよいですか?NSMutableDictionaryid

私はそれをやろうとしましたが、うまくいきません:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSString *path = [basePath stringByAppendingPathComponent:@"id.plist"];
NSMutableArray *mut_array = [[NSArray arrayWithContentsOfFile:path] mutableCopy];

NSMutableDictionary *mut_dico = [[NSMutableDictionary alloc] init];

NSString *egalIDPlistData = [contentDictio objectForKey:@"id"];

for(mut_dico in mut_array) {
    if([[mut_dico objectForKey:@"id"] isEqualToString:@"47653"]) {
        NSLog(@"Test");
    }
}
4

3 に答える 3

0

ログIDは49711で、if条件は47653です。配列にid = 47653の辞書が存在するまで、条件は満たされません

于 2012-11-08T02:55:21.463 に答える
0

NSMutableArray *mut_array = [[NSArray arrayWithContentsOfFile:path] mutableCopy];可変辞書ではなく、不変辞書の可変配列を作成します。mutableCopyディープコピーではありません。

可変性に関係なく、以下はあなたが望むことをします:

NSUInteger indexOfDictionary = [[array valueForKey:@"id"] indexOfObject:@"49711"];

if(indexOfDictionary == NSNotFound)
{
    NSLog(@"no matching objects found!");
    return;
}

NSDictionary *fullDictionary = [array objectAtIndex:indexOfObject];

valueForKey:、配列に対するキー値コーディング呼び出しが、配列内の各オブジェクトに対するその呼び出しの結果の配列を同じ順序で返すという事実と、この状況で と の両方に対して同様に応答するという事実を使用しますNSDictionaryvalueForKey:objectForKey:

実際に扱っているのが文字列なのか数字なのかという問題については、代わりに使用してみてください@49711@"49711"それが機能する場合は、代わりに数字があります。

于 2012-11-08T02:52:08.277 に答える
-1

読み込まれた plist 内のオブジェクトは変更できません。

試す:

for(NSDictionary * dict in mut_array)
{
    if([[dict objectForKey:@"id"] isEqualToString:@"49711"]) {
        NSLog(@"Test");
    }
}
于 2012-11-08T02:46:08.650 に答える