【问题标题】:NSString isEqual strange bugNSString isEqual 奇怪的bug
【发布时间】: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


【解决方案1】:

如果您的itemId48501,而JSON 中没有任何引号,则将其反序列化为NSNumber。可能这首先是问题所在。尝试记录您的itemId 的类型,并适当地使用-isEqualToString: 代表NSString-isEqualToNumber: 代表NSNumber

【讨论】:

  • 太棒了!这解决了我的问题。非常感谢你们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多