Во-первых, вам нужно обозначить журнал сбоев, используя DSYM, чтобы понять, что происходит.Вам потребуется файл DSYM с момента создания приложения.Файл DSYM позволяет вам преобразовать карту с этих адресов памяти обратно в читаемые строки кода.
SIGABRT - это сигнал, который вы получаете, когда у вас есть необработанное исключение, такое как вызов [someArray objectAtIndex:2]
, если массив имел только1 предметИли, чаще, нераспознанный селектор: [NSArray unsignedIntValue]
.
Взгляните на этот журнал сбоев в этот вопрос .Обратите внимание, что библиотеки стека вызовов в Foundation совпадают с вашим кодом - и это нераспознанный селектор.
Ваш код:
NSNumber *num = foo;
if (num)
{
bar = [num unsignedIntValue];
}
То, что вы нам не сказали, - ноочень важно - это то, что находится в «фу».Как вы назначаете этот NSNumber?Если это какой-либо другой объект, кроме NSNumber, то ваш журнал сбоев будет выглядеть как ваш.
Если вы хотите ДЕЙСТВИТЕЛЬНО защищаться в своих программах, вы можете сказать:
if (num && [num isKindOfClass:[NSNumber class]])
Нодействительно, каким бы ни был ваш "foo", он всегда должен возвращать NSNumber.