【发布时间】:2013-11-05 16:34:16
【问题描述】:
我有一个 Web 服务器,用于在我的 iOS 应用程序中获取一些数据。数据包括一个字段为itemId,比如说'48501'(不带引号)。我将项目 JSON 数据读入我的itemObject,其中itemId 被定义为NSString 而不是NSInteger。
到目前为止一切正常,但我想比较 itemObject.itemId 使用 isEqual: 函数与另一个 NSString 填充 48501。
换句话说,两个字符串完全相同,并且在我打印它们时包含48501。那里没有空间和隐藏的东西。所有isEqual: 和isEqualToString: 和== 在比较时都报告错误。
当我将NSStrings 转换为NSIntegers 并比较它们时,它有效,但并非总是如此!有时TRUE 有时崩溃,没有错误可捕获,只是指向行!我看到它们打印的完全一样,但是 if 语句没有通过。
我向比我更有经验的人展示了代码,他认为这可能是一个错误!有人接触过这个吗?
【问题讨论】:
-
您是否记录了两个字符串的长度以确保它们给出相同的值?
-
我非常非常怀疑您正在处理一个错误。听起来你在做一些非常非常错误的事情。您需要记录您的比较并发布其输出或发布代码。
-
解析 JSON 对象后,您确定
48501是字符串,而不是NSNumber?试图通过打印到控制台的方式来弄清楚它是什么并不是很有帮助。也打印类。数字周围的引号通常具有误导性。 -
您的属性被定义为
NSString并不意味着阻止您执行以下操作:myObject.itemId = @1。它仍将记录为1,但它不是NSString,而是NSNumber,这就是比较失败的原因。检查您是否从 JSON 中分配了一个字符串,或者执行NSLog(@"%@", [myObject.itemId class]);以在分配后检查属性的真实类... -
是的,如果 JSON 表示中的数字没有引号,那么它将转换为 NSNumber。
标签: objective-c json nsstring