Objective c NSString等位奇怪错误
我有一个web服务器,用于在iOS应用程序中获取一些数据。数据包括一个字段作为Objective c NSString等位奇怪错误,objective-c,json,nsstring,Objective C,Json,Nsstring,我有一个web服务器,用于在iOS应用程序中获取一些数据。数据包括一个字段作为itemId让我们说'48501'(不带引号)。我将item JSON数据读入我的itemObject,其中itemId被定义为NSString,而不是NSInteger 在这一点之前,一切都正常,但在使用isEqual:函数与另一个NSString填充了48501的函数比较itemObject.itemId时,我遇到了一些问题 换句话说,这两个字符串完全相同,在打印它们时包含48501。那里没有空间和隐藏的东西。所有
itemId
让我们说'48501'
(不带引号)。我将item JSON数据读入我的itemObject
,其中itemId
被定义为NSString
,而不是NSInteger
在这一点之前,一切都正常,但在使用isEqual:
函数与另一个NSString
填充了48501
的函数比较itemObject.itemId
时,我遇到了一些问题
换句话说,这两个字符串完全相同,在打印它们时包含48501
。那里没有空间和隐藏的东西。所有isEqual:
和IseQualString:
和==
在比较时报告为false
另一方面,当我将NSStrings
转换为NSInteger
s并对它们进行比较时,它会起作用,但并不总是如此!有时TRUE
有时崩溃,没有错误捕捉,只是指向线路!我看到它们打印的完全一样,但是if语句没有通过
我向比我更有经验的人展示了代码,他觉得这可能是一个bug!有人接触过这个吗?如果你的
itemId
是48501
,在JSON
中没有任何引号,那么它将被反序列化为NSNumber
。也许这就是问题所在。尝试记录您的itemId
的类型,并对NSString
使用适当的-isEqualToString:
和-isEqualToNumber:
来记录NSNumber
如果您的itemId
是48501
,而在JSON
中没有任何引用,则将其反序列化为NSNumber
。也许这就是问题所在。尝试记录您的itemId
的类型,并对NSString
使用-isEqualToString:
和-isEqualToNumber:
对NSNumber
使用适当的-isEqualToNumber:
是否记录了两个字符串的长度以确保它们给出相同的值?我非常非常怀疑您是否在处理bug。听起来你好像做错了什么。您需要记录比较并发布其输出或发布代码。解析JSON对象48501
后,您确定它是字符串而不是NSNumber
?试图通过将内容打印到控制台的方式来确定它是什么并没有多大帮助。同时打印该类。围绕数字的引号通常会产生误导。将属性定义为NSString
并不意味着阻止您执行以下操作:myObject.itemId=@1
。它仍将记录为1
,但它不是NSString
而是NSNumber
,这就是比较失败的原因。检查是否从JSON中分配了字符串,或者执行NSLog(@“%@,[myObject.itemId类])
在赋值后检查属性的真实类…是的,如果JSON表示中的数字周围没有引号,那么它将转换为NSNumber。您是否记录了两个字符串的长度以确保它们给出相同的值?我非常非常怀疑您处理的是错误。听起来你好像做错了什么。您需要记录比较并发布其输出或发布代码。解析JSON对象48501
后,您确定它是字符串而不是NSNumber
?试图通过将内容打印到控制台的方式来确定它是什么并没有多大帮助。同时打印该类。围绕数字的引号通常会产生误导。将属性定义为NSString
并不意味着阻止您执行以下操作:myObject.itemId=@1
。它仍将记录为1
,但它不是NSString
而是NSNumber
,这就是比较失败的原因。检查是否从JSON中分配了字符串,或者执行NSLog(@“%@,[myObject.itemId类])代码>在赋值后检查属性的真实类…是的,如果JSON表示中的数字周围没有引号,那么它将转换为NSNumber。太好了!这解决了我的问题。谢谢大家,太好了!这解决了我的问题。谢谢大家。