如何使用valueforkey作为语句参数

时间:2011-10-18 20:00:10

标签: iphone ios nsarray

我正在解析一堆看起来大致像这个

的xml
<Rows>
<Row ID="76" MANUFACTURER="DIB" ISTENT="F"/>
<Row ID="38" MANUFACTURER="HIB" ISTENT="T"/>
<Rows>

我想知道如何在if语句中使用ISTENT来仅返回那些真值的值..或者因为这些值仍然是字符串而不是布尔值= @“T”或者沿着这些行的某些东西.. < / p>

这有点像我到目前为止......但它没有接近正确...我希望它会让你知道我在尝试什么。

if ([arrayData valueForKey:@"ISTENT"] == @"T") {

    then pass my values over to custom method here.

}

但它没有传回任何东西......

3 个答案:

答案 0 :(得分:1)

首先,您不应该将字符串与==进行比较。改为使用isEqualToString:方法。

其次,我假设您已经成功解析了XML数据,并且您有一个包含每行属性的字典数组。

第三,你没有比较字符串,因为[arrayData valueForKey:@"ISTENT"]将返回一个包含ISTENT键值的数组,显然你无法直接与字符串进行比较。

然后,您可以像这样过滤原始数组:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",@"ISTENT",@"T"];
NSArray *filteredArray = [arrayData filteredArrayUsingPredicate:predicate];

结果数组只包含ISTENT等于T的行,我认为这就是你想要的。

答案 1 :(得分:1)

几乎是正确的。您必须使用此方法来比较objective-c中的字符串:

if ([[arrayData valueForKey:@"ISTENT"] isEqualToString:@"T"]) {
 //code here
}

根据NSString上的Apples class reference

  
      
  • (BOOL)isEqualToString:(NSString *)aString
  •   
     

返回一个布尔值,指示给定的字符串是否相等   使用基于Unicode的文字比较来接收接收器。

答案 2 :(得分:1)

在NSStrings上使用==只会比较内存地址,而不是字符串中的字符。使用isEqualToString来比较NSStrings

[[arrayData valueForKey:@"ISTENT"] isEqualToString:@"T"];

请注意,解决方案是区分大小写的。

对于布尔值,它取决于您的XML解析器是否足够智能以正确编组数据。你使用什么XML解析器?