首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSStrings与NSNumbers预警的比较

NSStrings与NSNumbers预警的比较
EN

Stack Overflow用户
提问于 2011-06-20 19:25:56
回答 4查看 1.3K关注 0票数 2

有时,JSON从获取数据的数据库返回(null),因此我检查它是否返回了该(null)

代码语言:javascript
运行
复制
else if (NSOrderedSame == [[clubsArray objectAtIndex:indexPath.row] compare:@"(null)"] )

但Xcode警告我

不兼容的目标-C类型'struct NSString *',期望'struct NSNumber *‘传递’比较:‘从不同的目标-C类型的参数1

我将NSStrings添加到该数组中,因此我对它为什么要讨论结构感到困惑。

代码语言:javascript
运行
复制
NSString *clubNameReturned = [message objectForKey:@"clubname"];
[clubsArray addObject:clubNameReturned];

有人能弄清楚这是怎么回事吗?

代码按我的预期执行,但我不想做一些不正确的事情。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-20 20:26:39

如果您显式地下垂,警告就会消失,例如:

if (NSOrderedSame == [(NSString *)[clubsArray objectAtIndex:indexPath.row] compare:@"(null)"] )

所发生的情况是,您正在对compare:的结果调用[clubsArray objectAtIndex:indexPath.row]方法,该方法的类型是id。现在,隐式下传被允许从id到任何其他类型..。但在您的情况下,编译器无法知道您想要的确切类型。是NSNumber还是NSString还是NSDate.?(顺便说一句,NSObject不响应compare:)。这是一个警告,因为编译器认为您将在运行时提供正确的类型(您会这样做!),但是它告诉您,您应该更明确地使用这类代码。

票数 0
EN

Stack Overflow用户

发布于 2011-06-20 19:30:42

JSON不返回"(null)“字符串。这个字符串"( null )“只是当您NSLog空单例对象(它是description表示)时在控制台上显示的内容。

[NSNull null]进行比较,后者是单例,特别用于在容器上存储表示空/零值的东西

票数 5
EN

Stack Overflow用户

发布于 2011-06-20 19:31:16

这是因为compare:方法的定义是:

代码语言:javascript
运行
复制
- (NSComparisonResult)compare:(NSNumber *)otherNumber;

因此,它需要一个NSNumber对象,但您要传递一个NSString。

如果要检查2个NSStrings是否相同,请使用isEqualToString:方法:

代码语言:javascript
运行
复制
else if ([[clubsArray objectAtIndex:indexPath.row] isEqualToString:@"(null)"])

但是,它很可能不会返回一个字符串(尽管这是打印到控制台时看到的),所以您应该这样做:

代码语言:javascript
运行
复制
else if ([clubsArray objectAtIndex:indexPath.row] == [NSNull null])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6416335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档