Objective c 比较NSStrings和有关NSNumbers的警告
有时JSON从它获取数据的数据库返回Objective c 比较NSStrings和有关NSNumbers的警告,objective-c,ios,cocoa-touch,comparison,compiler-warnings,Objective C,Ios,Cocoa Touch,Comparison,Compiler Warnings,有时JSON从它获取数据的数据库返回(null),所以我检查它是否返回了(null) 但是Xcode在警告我 不兼容的Objective-C类型“struct NSString*”,在从不同的Objective-C类型传递参数1“compare:”时应为“struct NSNumber*” 我将NSStrings添加到该数组中,所以我不明白它为什么要谈论结构 NSString *clubNameReturned = [message objectForKey:@"clubname"]; [clu
(null)
,所以我检查它是否返回了(null)
但是Xcode在警告我
不兼容的Objective-C类型“struct NSString*”,在从不同的Objective-C类型传递参数1“compare:”时应为“struct NSNumber*”
我将NSString
s添加到该数组中,所以我不明白它为什么要谈论结构
NSString *clubNameReturned = [message objectForKey:@"clubname"];
[clubsArray addObject:clubNameReturned];
有人能解释一下这里发生了什么吗
代码按我预期的方式执行,但我不想做不正确的事情。JSON不返回“(null)”字符串。此字符串“(null)”仅在NSLog空单例对象时显示在控制台上(它是description
representation)
与
[NSNull null]
进行比较,这是因为比较:
方法的定义是:
- (NSComparisonResult)compare:(NSNumber *)otherNumber;
因此,它需要一个NSNumber对象,但您正在传递一个NSString
如果要检查两个NSString是否相同,请使用IsequalString:
方法:
else if ([[clubsArray objectAtIndex:indexPath.row] isEqualToString:@"(null)"])
但是,它可能不会返回字符串(尽管打印到控制台时会看到该字符串),因此您应该执行以下操作:
else if ([clubsArray objectAtIndex:indexPath.row] == [NSNull null])
如果您明确表示沮丧,警告将消失,例如:
if(nsOrderedName=[(NSString*)[clubsArray objectAtIndex:indexPath.row]比较:@“(null)”)
发生的情况是,您正在对
[clubsArray objectAtIndex:indexPath.row]
的结果调用compare:
方法,该方法的类型为id
。现在,允许从id
隐式向下转换到任何其他类型。。。但在您的情况下,编译器无法告诉您想要的确切类型。是NSNumber
还是NSString
还是NSDate
。。。?(顺便说一句,NSObject
不响应compare:
)。这是一个警告,因为编译器认为您将在运行时提供正确的类型(确实如此!),但它告诉您应该更明确地使用此类代码。我建议您使用NSDictionary上的此类别来处理JSON数据中的空值:
您有错误:
NSLog(@“%@”,nil)代码>打印(null)
和NSLog(@“%@,[NSNull-null])代码>打印
。
else if ([clubsArray objectAtIndex:indexPath.row] == [NSNull null])