Как заставить NSAssert записывать описание в Xcode4? - PullRequest
8 голосов
/ 07 декабря 2011

Xcode 4 сообщает мне, когда произошел сбой NSAssert, но описание утверждения и обратная трассировка больше не регистрируются. Я видел этот вопрос:

Как заставить Xcode4 остановиться при сбое NSAssert?

, что полезно, но я бы предпочел записать утверждение и продолжить. Как я могу заставить NSAssert вести себя таким образом? Спасибо!

Ответы [ 2 ]

5 голосов
/ 08 декабря 2011

Вопрос, с которым вы связались, поможет вам пройти большую часть пути.Добавьте действие точки останова к точке останова, установленной для утверждения.Выберите точку останова в навигаторе точек останова, щелкните правой кнопкой мыши и выберите «Изменить точку останова».Выбор Edit Breakpoint открывает всплывающий редактор.Во всплывающем редакторе вы должны увидеть строку Action с текстом Click, чтобы добавить действие.Нажмите на этот текст, чтобы открыть меню.Выберите Log Message в меню Action.Установите флажок «Автоматически продолжать после оценки действий», чтобы автоматически продолжить после регистрации сообщения.

1 голос
/ 14 февраля 2013

Если вам нужно войти в систему и двигаться дальше, вам не нужно использовать NSAssert.

В общем, утверждения предназначены для использования разработчиками в отладочных сборках, чтобы немедленно остановить выполнение приложения, когдасерьезная ошибка была обнаружена.По умолчанию проекты XCode устанавливают NS_BLOCK_ASSERTIONS в сборках выпуска, так что вызовы NSAssert компилируются.

Для незначительных проблем, которые требуют только входа в консоль, вы должны просто использовать NSLog.(Консоль отладчика на самом деле показывает данные, отправленные на 'stdout', куда NSLog отправляет свои результаты.)

Если вам нужны отладочные версии, чтобы утверждать и выпускать сборки для регистрации, просто используйте оба.Да, это означает, что вы можете иметь одно и то же описание дважды в коде, но это нормально.Это будет легко понять любому разработчику.(Вы можете сначала создать результирующую строку, если хотите, передать ее как NSAssert, так и NSLog.)

Если вам необходимо переопределить поведение вызова NSAssert, то у вас есть 2 варианта: 1 - изменить макросопределение NSAssert, NSAssert1, NSAssert2 и т. д., чтобы изменить результат.2 - предоставьте свой собственный объект NSAssertionHandler вашим потокам и пропустите его, выбрасывая исключения.

...