#ios
#iOS
Вопрос:
Сбой моего приложения по неопределенной причине, и в итоге я получаю этот журнал:
MyProj[9442:707] -[Длина NSDecimalNumber]: нераспознанный селектор, отправленный экземпляру 0x2e6690
Могу ли я получить более подробную информацию? Что означает 9442: 707, это номер строки?
Редактировать
В моем коде я добавил трассировки типа:
NSLog(@"KEYS:%@", myKeys);
NSLog(@"KEYS ORDERED:%@", [myKeys sortedArrayUsingSelector:@selector(compare:)]);
Но вторая строка вылетает. Ошибка «длина», с которой я столкнулся, похоже, исходит из этой строки (хотя я нигде не использую [something length]).
2011-11-11 14:20:18.936 MyProj[9570:707] KEYS:(
330,
359,
362,
367,
352,
351,
364,
331,
350
)
... then crash... with above error
Комментарии:
1. ознакомьтесь с этим: как отследить и отладить сбой в iOS: ios-blog.co.uk/tutorials /…
Ответ №1:
Отладчик iOS иногда довольно нечетко описывает точную проблему. Тем не менее, в вашем случае это должно быть ясно. [NSDecimalNumber length]
не может быть выполнен, потому что длина метода нам неясна.
Попробуйте найти строку, в которой вы используете функцию длины, и измените ее на что-то, что действительно работает. С помощью фрагмента кода в вашем вопросе мы могли бы уточнить это.
Комментарии:
1. Я не использую «длину» в коде, похоже, она связана при сортировке массива (я добавил часть кода в вопросе).
2. @Luc: Метод сравнения. Будет делать что-то под прикрытием с функцией длины. Вполне может быть, что.
3. Вы правы, длина вызывается в методе сравнения. Я только что увидел, что сравниваемые объекты не все были NSString, среди них был скрыт NSDecimalNumber… Я изменил его на NSString, и он работает нормально. Спасибо за вашу помощь.
Ответ №2:
9442:707 — это информация о процессе .. здесь это вам не поможет.
Где-то в вашем коде вы отправляете сообщение о длине в NSDecimalNumber.
Можете ли вы заставить сбой произойти в отладчике? Если это так, проверьте стек вызовов во время сбоя, и он должен указать вам прямо на проблему.
Если нет — если ваша кодовая база не слишком велика, вы могли бы выполнить поиск в своем коде по «длине» и проверить везде, где вы отправляете сообщение о длине, чтобы увидеть, могло ли оно отправлять его объекту неправильного типа.
Комментарии:
1. Мне удалось изолировать ошибку, но, похоже, это не из-за явного вызова [something length]. Я обновил вопрос и добавил дополнительные журналы.