从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?的主要内容,如果未能解决你的问题,请参考以下文章

Objective C 从字符串中解析整数

将 NSArray 中的每个 NSString 元素显示为 UIButton Objective C

如何在滚动视图中显示从 Web 获取的 NSArray 数据并在 Objective C 中扩展+更新它?

将NSArray中的每个NSString元素显示为UIButton Objective C

这应该如何正确地从 Objective C 转换为 swift 3

Objective C - NSArray 的 indexOfObject:不起作用