0

我有一个NSMutableArrayNSMutableDictionary它是一个 plist)。数组中的每个字典都有 2 个键:' id' 和 ' lu'。

如何在 where 中找到索引NSMutableArrayNSMutableDictionary例如id= '47653'?

我试图这样做,但它不工作:

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

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:了这样一个事实,即对数组的键值编码调用以相同的顺序返回对数组中每个对象的调用结果的数组,以及在这种情况下对两者的NSDictionary响应类似的事实valueForKey:objectForKey:

至于您真正处理的是字符串还是数字的问题,请尝试使用 just@49711代替,@"49711"如果可行,则您有数字。

于 2012-11-08T02:52:08.277 回答
0

在您的日志中,ID 为 49711,而在您的 if 条件中,它为 47653。在您的数组中存在 id = 47653 的字典之前,您的条件不会满足

于 2012-11-08T02:55:21.463 回答
-1

加载的 plist 中的对象是不可变的。

尝试:

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