我正在解析一堆看起来大致像这个
的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.
}
但它没有传回任何东西......
答案 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解析器?