Ладно, теперь я понимаю ваш вопрос.Это заняло у меня некоторое время.
Итак, я предполагаю, что у вас включены объекты Zombie (NSZombieEnabled), и вы задаетесь вопросом, почему вы не можете поймать эту ошибку - отправка сообщения зомби--со структурой @ try / @ catch.
Краткий ответ: NSZombies не выдает исключение Objective-C (которое вы можете поймать таким образом).В этом не было бы никакого смысла, так как в любом случае вы не поставили бы приложение с NSZombieEnabled.Это должен быть инструмент отладки, который вы используете в отладчике или в инструментах.
В вашем реальном приложении, когда вы выключаете NSZombie, все равно не будет исключения для этого, так как выпросто получил бы EXE_BAD_ACCESS, который является сигналом UNIX (не этот тип исключения на этом уровне).
Последний пункт - это исключения Objective-C (тип, который вы можете @ try / @ catch) не рекомендуются для ошибок, от которых вы ожидаете восстановления.Или, другими словами, это предназначено только для фатальных ошибок, когда вы можете выполнить некоторую очистку и затем позволить своему приложению все еще падать.
Правильный способ сделать то, что вы пытаетесь сделать, - это на самом деле проверитьдля разных типов или разных значений, которые вы можете получить, кроме как получить, а затем обработать каждый случай соответствующим образом.Вы можете сделать это, используя обычные условные выражения if / else или что-то в этом роде.Вы можете проверить значения для nil
, если вам нужно, и вы можете увидеть, принадлежит ли объект к определенному классу, используя [someObj isKindOfClass:[MyExpectedClass class]]
Надеюсь, я правильно понял вопрос?