2012-12-24 96 views
1

我所试图实现的是搜索的数组,字符串,这里是用于搜索阵列搜索的数组,字符串

if ([EssentialsArray containsObject:imageFilePath]) { 

     NSLog(@"YES"); 
    } 
    else { 

     NSLog(@"NO"); 
     NSLog(@"%@", ImageFilePath); 
     NSLog(@"%@", EssentialsArray); 
    } 

代码中的NSLogs返回此为imageFilePath:

/var/mobile/Applications/5051DC84-CAC8-4C1D-841D-5539A1E28CB1/Documents/12242012_11025125_image.jpg 

这对于EssentialsArray:

(
     { 
     EssentialImage = "/var/mobile/Applications/5051DC84-CAC8-4C1D-841D-5539A1E28CB1/Documents/12242012_11025125_image.jpg"; 
    } 
) 

然后很明显他们返回一个“否”的值,因为凑阵没找到字符串。 在此先感谢

+2

你不指定你的数组类型,但不是这样相同http://stackoverflow.com/questions/1853801/search-through-nsarray-for-string – Craig

+0

@cppl完全忘了也指定了数组类型,并感谢这与我所要求的相同并解决了我的问题。不知道为什么它没有出现在我的搜索。欢呼 – agierens

+0

@cppl,它不是重复的。这看起来像一个不同的问题。这里的问题是对象是字典,他试图检查字符串。 – iDev

回答

4

问题是,调用[EssentialsArray containsObject:imageFilePath]明确假定EssentialsArray是一个字符串数组,但它不是。这是一个包含一个键的字典条目数组,EssentialImage

至少有两种解决方案。首先是使字符串数组那些字典条目,其关键是EssentialImage

NSArray *essentialImages = [essentialsArray valueForKey:@"EssentialImage"]; 

if ([essentialImages containsObject:imagePath]) 
    NSLog(@"YES"); 
else 
    NSLog(@"NO"); 

根据您essentialsArray的大小(请注意,习惯上还是会把变量总是以小写字母开头),这似乎有点浪费创建一个数组,所以你可以做containsObject,但它的工作原理。

其次,在我看来,更好的方法是使用快速枚举来检查字典条目数组,寻找匹配。要做到这一点,定义一个方法:

- (BOOL)arrayOfDictionaries:(NSArray *)array 
     hasDictionaryWithKey:(id)key 
      andStringValue:(NSString *)value 
{ 
    for (NSDictionary *dictionary in array) { 
     if ([dictionary[key] isEqualToString:value]) { 
      return YES; 
     } 
    } 

    return NO; 
} 

您现在可以检查,看看你的字典阵列具有与imagePath

if ([self arrayOfDictionaries:essentialsArray 
     hasDictionaryWithKey:@"EssentialImage" 
       andStringValue:imagePath]) 
    NSLog(@"YES"); 
else 
    NSLog(@"NO"); 

包含字符串值等于字符串名为 @"EssentialImage"关键

更新:

您还可以使用predicates

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"EssentialImage contains %@", imagePath]; 

BOOL found = [predicate evaluateWithObject:array]; 
+0

这也正是我想要的,非常感谢! :D – agierens

+0

也感谢您花时间解释它是如何工作的。 – agierens