关于NSArray nil崩溃错误

时间:2013-04-17 03:52:30

标签: ios objective-c nsmutablearray nsarray

如何避免此崩溃错误!主线程日志崩溃

ProcessArray:()
ProcessArray == 0
-[NSNull length]: unrecognized selector sent to instance 0x3c4e1090

我的代码:

ProcessArray = [EventSheetDetailArray  valueForKey:@"Process"];
NSLog(@"ProcessArray:%@",ProcessArray);

if (ProcessArray.count > 0 ) {
    NSLog(@"ProcessArray != 0");
    [self ProcessJSONDateFormat];
}else{
    NSLog(@"ProcessArray == 0");
}

我改变下面的判断!

id value = [EventSheetDetailArray valueForKey:@"Process"];
if ( ![[NSNull null] isEqual:value] )
{
    ProcessArray = value;
    NSLog(@"1111111");
}else{
    NSLog(@"2222222");
}

但总是运行NSLog(@“1111111”)这一行! 无论是否有任何价值!

4 个答案:

答案 0 :(得分:4)

验证[EventSheetDetailArray valueForKey:@“Process”]的返回值

id value = [EventSheetDetailArray valueForKey:@"Process"];
if ( ![[NSNull null] isEqual:value] )
{
    ProcessArray = value;
}

OR

id value = [EventSheetDetailArray valueForKey:@"Process"];
if ( [value isKindOfClass:[NSArray class]] )
{
    ProcessArray = value;
}

然后你可以调用NSArray成员函数,不要只假设它是NSArray ..

答案 1 :(得分:0)

答案其实很简单。

if([ProcessArray count] != [NSNULL NULL]) {
    if (ProcessArray.count > 0 ) {
      NSLog(@"ProcessArray != 0");
     [self ProcessJSONDateFormat];
    }else {
      NSLog(@"ProcessArray == 0");
    }
}else {
      NSLog(@"NULL...insert some value");
}

答案 2 :(得分:0)

抱歉!我找到了错误的原因,因为我的其他代码有错误,导致主线程崩溃 - [NSNull length]原因!

答案 3 :(得分:0)

如果您的阵列是空的,那么您无法检查计数,否则会崩溃。我遇到了同样的问题。只需使用" if(!(array == nil))"。当您的数组为空时,这是正确的,否则它将移动到else部分。