2017-10-28 175 views
0

爲什麼我試圖在id對象上使用isKindOfClass。有時,它出了問題嚴重,並顯示EXC_BAD_ACCESSisKindOfClass on id object cause EXC_BAD_ACCESS

下面是代碼(當用戶在低吼通知點擊將被調用):

- (void)growlNotificationWasClicked:(id)fromUserClick { 
    NSDictionary *data = (NSDictionary *)fromUserClick; 
    id object = [[data objectForKey:@"someKey"] unsignedLongValue]; 

    if([object isKindOfClass:[NSNumber class]]) { 
     NSLog(@"test"); 
    } 
} 

,這裏是在崩潰期間所檢查顯示:

enter image description here

請幫我解決這個問題。謝謝。

+0

'object'可能已被釋放,或者它根本不是一個有效的引用。你有殭屍嗎? – Sulthan

+0

有什麼方法可以檢測或避免它? – user2131907

+0

對象來自哪裏以及如何存儲它? – Willeke

回答

1

isKindOfClassNSObject的方法。當您使用unsignedLongValue時,它將返回一個unsigned longunsigned long不是一個對象。

這就是爲什麼你會崩潰。

P/S:當你寫[[data objectForKey:@"someKey"] unsignedLongValue]時,它總是返回一個數字。您不需要檢查返回的值是否爲數字。只要使用它。

unsigned long number = [[data objectForKey:@"someKey"] unsignedLongValue];

+0

問題中的代碼是'unsignedLongValue'。什麼是正確的代碼? – Willeke

+0

再次檢查。我已經更新了答案。 – trungduc

+0

@Willeke告訴我,如果你可以解決它:) – trungduc