有时,JSON从获取数据的数据库返回(null)
,因此我检查它是否返回了该(null)
。
else if (NSOrderedSame == [[clubsArray objectAtIndex:indexPath.row] compare:@"(null)"] )
但Xcode警告我
不兼容的目标-C类型'struct NSString *',期望'struct NSNumber *‘传递’比较:‘从不同的目标-C类型的参数1
我将NSString
s添加到该数组中,因此我对它为什么要讨论结构感到困惑。
NSString *clubNameReturned = [message objectForKey:@"clubname"];
[clubsArray addObject:clubNameReturned];
有人能弄清楚这是怎么回事吗?
代码按我的预期执行,但我不想做一些不正确的事情。
发布于 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:
)。这是一个警告,因为编译器认为您将在运行时提供正确的类型(您会这样做!),但是它告诉您,您应该更明确地使用这类代码。
发布于 2011-06-20 19:30:42
JSON不返回"(null)“字符串。这个字符串"( null )“只是当您NSLog空单例对象(它是description
表示)时在控制台上显示的内容。
与[NSNull null]
进行比较,后者是单例,特别用于在容器上存储表示空/零值的东西。
发布于 2011-06-20 19:31:16
这是因为compare:
方法的定义是:
- (NSComparisonResult)compare:(NSNumber *)otherNumber;
因此,它需要一个NSNumber对象,但您要传递一个NSString。
如果要检查2个NSStrings是否相同,请使用isEqualToString:
方法:
else if ([[clubsArray objectAtIndex:indexPath.row] isEqualToString:@"(null)"])
但是,它很可能不会返回一个字符串(尽管这是打印到控制台时看到的),所以您应该这样做:
else if ([clubsArray objectAtIndex:indexPath.row] == [NSNull null])
https://stackoverflow.com/questions/6416335
复制相似问题