2017-10-28 4 views
0

idオブジェクトでisKindOfClassを使用しようとしたのはなぜですか。時には、それはひどく間違っていた。ここでEXC_BAD_ACCESSidオブジェクトのKindOfClassが原因でEXC_BAD_ACCESSが発生する

を示し、コード(ユーザーがGrowlの通知をクリックしたときに呼び出されます)です。

- (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

isKindOfClassは、NSObjectの方法です。 unsignedLongValueを使用すると、unsigned longを返し、unsigned longはオブジェクトではありません。

これがクラッシュした理由です。

P/S:[[data objectForKey:@"someKey"] unsignedLongValue]と書くと、常に数値が返されます。返される値が数値であるかどうかを確認する必要はありません。ちょうどそれを使用します。

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

+0

質問のコードは 'unsignedLongValue'を行います。正しいコードは何ですか? – Willeke

+0

再度確認してください。私は答えを更新しました。 – trungduc

+0

@Willekeあなたがそれを解決できるかどうか教えてください:) – trungduc

関連する問題