我发了Sender类和发送者对象:
Sender *sender = [[Sender alloc] init];
然后,我写了测试:
// should success
[sender upload:[UIImage imageNamed:@"test2.jpg"] withName:@"test2.jpg"];
// should fail
[sender upload:nil withName:@"test2.jpg"];
然后,我写了零检查代码:
- (void)upload:(UIImage *)image withName:(NSString *)name
{
if ([image isEqual:nil]) {
...
}
...
}
但是忽略了零检查。 如何检查图像参数是否为零? 谢谢你的好意。
答案 0 :(得分:3)
尝试
if(!image)
或
if(image == nil)
答案 1 :(得分:2)
简短回答,将[image isEqual:nil]
替换为image == nil
。
答案很长,当你写:
[image isEqual:nil]
您要求将消息isEqual:
发送到其参考存储在变量image
中的对象。
但是,您不希望向对象发送消息,您希望确定变量image
是否包含对对象的引用。为此,您需要将引用的值与“无引用”值进行比较 - 该值为nil
。 Objective-C(和C等人)中的值比较运算符为==
,因此您需要测试:
image == nil
现在你可能会问为什么你的代码没有错误地执行,只是没有产生你期望的结果,因为没有对象发送消息? Objective-C支持向“无对象”发送消息,即nil
,并返回结果类型的“零”值,即0
,nil
等。转换为布尔值时值,如在if
语句中,“零”值会产生NO
。
HTH
答案 2 :(得分:1)
@ yeesterbunny的回答是关于在这种情况下你应该做些什么,但知道原因也很好。
请记住,每个objc方法调用都是一条消息。当你打电话
[objA isEqual:objB]
你正在向objA发送一条消息,询问它是否认为自己与objB“相等”。
如果您的方法的“image”参数为nil,则没有任何内容可以向其发送消息。根据定义,任何到nil的消息都返回nil。 (在if语句中,“nil”与零相同。)
故事的道德:如果你正在寻找零,测试指针与==(或!=,或隐含地如“if(!image)”)相等。使用isEqual:仅当您要测试两个对象(已知存在且类似类型)在语义上是否相等时(例如,当您想知道两个NSString实例是否包含相同的文本时)。