从Objective C中的NSArray转换时如何比较String?
Posted
技术标签:
【中文标题】从Objective C中的NSArray转换时如何比较String?【英文标题】:How to compair NString when it is converted from NSArray in Objective C? 【发布时间】:2016-09-16 11:05:51 【问题描述】:我是 ios 新手。我在代码中遇到了问题
array=[[NSMutableArray alloc] init];
array =[responsedict valueForKey:@"Type"];
NSLog(@"Type Array =%@",array);
for (int i =0; i<[array count]; i++)
if (array.count>0)
typeString = [NSMutableString stringWithFormat:@"%@", [array objectAtIndex:i]];
NSLog(@"Type String =%@",typeString);
我将字符串中的值作为
Type String =1
Type String =2
现在我需要比较 cellForRowAtIndexPath 中的字符串
if ([typeString isEqual:@"1"])
cell.IBTiconlbl.textColor = [UIColor blueColor];
if ([typeString isEqual:@"2"])
cell.IBTiconlbl.textColor = [UIColor redColor];
但它只将文本颜色转换为 readColor 而不是蓝色。字符串同时包含值 1 和 2。当字符串值为 1 时,我需要将文本颜色转换为蓝色,当字符串值为 2 时,我需要将文本颜色转换为红色。但它只执行一次操作。
【问题讨论】:
像这样使用if ([typeString isEqualToString:@"1"])
来比较字符串
【参考方案1】:
试试这个...
if ([typeString isEqualToString:@"1"])
cell.IBTiconlbl.textColor = [UIColor blueColor];
else if ([typeString isEqualToString:@"2"])
cell.IBTiconlbl.textColor = [UIColor redColor];
else
cell.IBTiconlbl.textColor = [UIColor clearColor];
【讨论】:
【参考方案2】:无需将整个数组转换为NSString
,这将节省一点代码优化时间,您可以通过使用indexPath.row
检查对象并采取相应措施来做到这一点,请参见下面的代码:
if([[NSString stringWithFormat:@"%@",[array objectAtIndex:indexPath.row]] isEqualToString:@"1"])
cell.IBTiconlbl.textColor = [UIColor blueColor];
else if([[NSString stringWithFormat:@"%@",[array objectAtIndex:indexPath.row]] isEqualToString:@"2"])
cell.IBTiconlbl.textColor = [UIColor redColor];
else
// code for else part here
【讨论】:
您的代码显示错误 [__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0xb000000000000013 好的,看看我的更新和现在..previously 数组返回的数字是你得到的错误.. 您的代码非常完美。感谢您帮助我度过了美好的一天。【参考方案3】:我认为你需要一本关于 iOS 编程的书并学习它。
问题一:
在第一行创建一个 NSMutableArray 并将其分配给数组。在下一行中,您将覆盖数组。创建 NSMutableArray 完全没有意义。
问题 2:
您正在使用 valueForKey 方法。除非您阅读过 valueForKey 的文档,并且理解它,并且您有正当理由使用 valueForKey 而不是 objectForKey,否则您应该使用 objectForKey 或下标语法。所以要么 [responseDict objectForKey:@"Type"] 要么更好的 responseDict [@"Type"]。
问题 3:
你没有以任何方式检查结果,所以如果你有一个不是数组的对象,你的应用程序很快就会崩溃。如果你将它分配给 NSMutableArray,那么一旦你尝试修改它,它就会崩溃,因为它不太可能是 NSMutableArray。
问题 4:
“if (array.count > 0)”显然没有意义。
问题 5:
如果不使用正确的循环语法,您和其他人的生活就会变得非常艰难。 for (id item in array) 更短,运行速度比您的代码快得多。
问题 6:
为什么 typeString 是可变的?
问题 7:
您似乎不知道数组中存储了什么样的对象。是数字还是字符串?您应该真正了解这一点并进行相应的比较。
问题 8:
您绝对不应该解析 cellForRowAtIndexPath 中的某些数据。那太可怕了。获取您的 responseDict,定义一个可以表示您的响应数据的类,将其一次解析为适当的数据,包括您拥有的所有错误检查,然后 cellForRowAtIndexPath 可以访问数据。
【讨论】:
当我不使用 if (array.count>0) 并且数组为零时,应用程序会崩溃。所以为了防止崩溃,我正在使用 if (array.count>0)。 array 只是 NSMutableArray 的一个对象。以上是关于从Objective C中的NSArray转换时如何比较String?的主要内容,如果未能解决你的问题,请参考以下文章
将 NSArray 中的每个 NSString 元素显示为 UIButton Objective C
如何在滚动视图中显示从 Web 获取的 NSArray 数据并在 Objective C 中扩展+更新它?
将NSArray中的每个NSString元素显示为UIButton Objective C