Cocoa - Предлагаемые методы для отладки проблем с привязкой между XCode и Interface Builder

Я новичок в Cocoa, и я работаю над примерами в книге Hillegass book 'Cocoa для Mac OS-X. Было несколько случаев, когда образец приложения, с которым я работал, запускается, и я получаю сообщение, например:

2009-03-11 00: 39: 19.167 CarLot [7517: 10b] Невозможно создать NSData из объекта < _NSControllerObjectProxy: 0x188bf0 > класса _NSControllerObjectProxy

Единственный способ, который я нашел для решения такой проблемы, - это кропотливо пройти все привязки и атрибуты в построителе интерфейса, чтобы увидеть, где я пропустил какую-то конфигурацию, - что все требует времени!

Есть ли более эффективный способ определить, что проблема из сообщения об ошибке? Существуют ли какие-либо методы отладки, которые вы можете использовать для отслеживания таких проблем?

Ответ 1

В этой статье очень кратко говорится об этом.

В основном, в нем говорится, что вы можете посмотреть в файлах Xib, чтобы быстрее узнать, какие привязки вы установили в своем приложении.

Надеюсь, что это поможет!

Ответ 2

Там есть замечательная статья на сайте Apple Dev по устранению неполадок.

http://developer.apple.com/mac/library/documentation/cocoa/conceptual/CocoaBindings/Concepts/Troubleshooting.html

Ключ от руки? Там параметр под названием NSBindingDebugLogLevel, который вы можете использовать для получения отладочной информации.

Два способа установить его:

1 - Постоянно в настройках по умолчанию

defaults write com.yourdomain.yourapplication NSBindingDebugLogLevel 1

2 - передайте его как параметр при отладке

path/to/your/app -NSBindingDebugLogLevel 1

Ответ 3

Я не уверен, что есть способ получить сводку привязок и атрибутов, которые вы настроили, кроме самого Interface Builder. Насколько я знаю, это единственный gui, который показывает эту информацию. Вы можете попробовать запустить приложение в отладчике и взломать исключения (- [NSException raise]), чтобы узнать, можете ли вы хотя бы отследить, какой объект дает вам эту ошибку, что может помочь вам найти плохое соединение в IB.

Если ваше приложение достаточно мало и быстро работает, и вы только начинаете использовать IB и привязки, я бы предложил вам сделать одно соединение и протестировать его, чтобы увидеть, работает ли оно, а затем перейти к следующему. Таким образом, вы узнаете, какое соединение или атрибут вызывает проблемы.

Я надеюсь, что у кого-то есть лучший ответ, чем этот, но насколько я знаю, нет инструмента для проверки проблем соединения IB с pin-point.

Ответ 4

Что делать, если вы выполняете привязки программным способом, а не выполняете его в интерфейсе?

Для этого вам нужно использовать этот метод NSObject:

- (void)bind:(NSString *)binding toObject:(id)observableController withKeyPath:(NSString *)keyPath options:(NSDictionary *)options

Ответ 5

Сначала я не заметил, что если вы посмотрите на инспектора соединений для объекта, он отобразит хороший список всего, на что он привязан, и если вы наведите курсор на элемент, он выделит соответствующий элемент.

Это хорошо, если вы снова привязали что-то к Столбец таблицы.