2013-04-17 49 views
0

如何避免這種碰撞錯誤崩潰是關於在主線程登錄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」)這一行!不管是否有任何價值!

+3

在這個實現中,你不需要alloc-> init你的數組。你'EventSheetDetailArray'將返回'[NSNull空]',而不是一個數組 –

回答

4

驗證從[EventSheetDetailArray valueForKey:@ 「過程」]的返回值

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。

+0

要andykkt:我用的,如果([NSNull空] isEqual:方法值]!),但記錄顯示 - [NSNull長]:無法識別的選擇發送到實例0x3c4e1090 – SimonKira

+0

要andykkt:對不起,我Konw - [NSNull長]:無法識別的選擇發送到實例0x3c4e1090,因爲有其他的代碼錯誤! – SimonKira

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"); 
} 
+0

To anilMotwani:這[NSNULL NULL]有錯誤! – SimonKira

0

對不起!我找到了錯誤的原因,因爲我的其他代碼有錯誤,導致crash主線程 - [NSNull length]原因!

0

如果數組是空的,那麼你可以不檢查計數否則會crash.I面臨着同樣的issue.Just使用「如果(!(陣列==無))。」這是真的,當你陣列否則它將移動到其他部分。