NSData 空值检查

3

我正在将图像从我的Coredata赋值给NSData对象,赋值后我会检查NSData是否有图像。

如果数据不为空,我需要显示它。否则,我会在NSLog中记录“未找到图像”。

只有在对象中没有图像时,应用程序才会崩溃。

我尝试了:

    NSData * dataImage;
    if (dataImage == nil) 
    {


        NSLog(@"Image is Assigned .... " );

    }
    else 
    {

        NSLog(@"Image is Not Assigned ITS NIL.... " );
    }

我的设备控制台看起来像这样:

Wed Nov 16 12:31:09 unknown ReportCrash[783] <Notice>: Formulating crash     report for process Dial Up App[782]
Wed Nov 16 12:31:09 unknown com.apple.launchd[1] <Warning>: (UIKitApplication:com.hiteshi.Dial-Up-App[0x1b63]) Job appears to have crashed: Segmentation fault
Wed Nov 16 12:31:09 unknown SpringBoard[24] <Warning>: Application 'Dial Up App' exited abnormally with signal 11: Segmentation fault
Wed Nov 16 12:31:10 unknown ReportCrash[783] <Error>: Saved crashreport to /var/mobile/Library/Logs/CrashReporter/Dial Up App_2011-11-16-123107_Priya-Chaturvedis-iPhone.plist using uid: 0 gid: 0, synthetic_euid: 501 egid: 0

我不知道我做错了什么。应用程序在模拟器上运行顺畅,但在设备上崩溃。我做错了什么?


当调试器崩溃时,您看到了什么错误? - NSResponder
应用程序“拨号应用”异常退出,信号11:分段错误。应用在设备上崩溃而不是模拟器上... - NSException
告诉我们提供图片的人是谁,我认为这张图片已经被释放并且某种方式正在使用 nil 引用。 - Goles
1
我正在从我的数据库表中获取图像。感谢您的关注! - NSException
3个回答

18

当您使用==运算符时,您正在比较指针值。只有在比较的对象确实是完全相同的对象,位于同一内存地址时,这才有效。
您还可以使用isEqualToData:方法。该方法返回YES如果数据的内容与接收器的内容相等,否则返回NO。两个数据对象仅在它们持有相同数量的字节并且对象中相同位置上的字节相同时才相等。

NSData * dataImage = [[NSData alloc]init];
    if (dataImage == nil) 
    {
        NSLog(@"Image is Assigned .... " );

    }else 
    {
        NSLog(@"Image is Not Assigned ITS NIL.... " );
    }
// Output:Image is Not Assigned ITS NIL....

谢谢您的建议,在Objective C中进行比较时,我会牢记这一点。 :) - NSException

4
您弄反了,需要的是:
if (dataImage != nil)

反转条件没有效果。应用程序在条件的同一点崩溃。 - NSException
@George:收到此消息:类型“NSData”的值永远不可能为nil,因此不允许进行比较。 - Jayprakash Dubey

1
尝试这个。
if ((dataImage != NULL) && ![v isKindOfClass:[NSNull class]])
{

}

除此之外,其他方法都对我没用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接