Окно NSWindowController?

У меня есть приложение на основе строки меню, которое отображает окно при нажатии значка. Все это отлично работает в Mac OS X Lion, но по какой-то причине возникает ошибка в Snow Leopard и более ранних версиях Mac OS X. Каждый раз, когда вызывается [TheWindowController window], метод останавливается, но приложение продолжает работать. Из-за этого я не думаю, что окно просто нулевое, оно каким-то образом повреждено.

Я понятия не имею, почему это происходит, и, как я уже сказал, это происходит только в Mac OS X Snow Leopard. Кстати. Я использую ARC, если это вообще имеет значение.


person IluTov    schedule 08.04.2012    source источник
comment
Записывается ли что-нибудь в журнал консоли, когда это происходит? Кроме того, можете ли вы показать код метода, который просто останавливается?   -  person Ken Thomases    schedule 08.04.2012
comment
К сожалению, я не могу увидеть журнал консоли, потому что ARC не поддерживается в OS X 10.6 ... Я провел еще несколько поисков, это действительно странно. У окна нет проблем, пока на нем нет элемента. Когда я добавляю на него настраиваемый вид, он вылетает ...   -  person IluTov    schedule 08.04.2012
comment
Я не уверен, какое отношение ARC имеет к просмотру журнала консоли. Запустите /Applications/Utilities/Console.app. В списке журнала выберите Сообщения консоли. Попробуйте запустить приложение и посмотрите, что написано в журнале консоли.   -  person Ken Thomases    schedule 08.04.2012
comment
nskeyedunarchiver decodeobjectforkey не может декодировать объект класса (nslayoutconstraint)   -  person IluTov    schedule 08.04.2012
comment
и я получаю много таких com.apple.launchd.peruser.501 [157] (com.akamai.client.plist [4367]) Ошибка: launchd_core_logic.c: 4139 (24498): 13   -  person IluTov    schedule 08.04.2012


Ответы (1)


Вы загружаете NIB, который использует специфичную для версии 10.7 функцию Cocoa Autolayout в версии 10.6, которая ее не понимает. Если вы хотите поддерживать работу на 10.6, вам следует избегать использования таких функций. У вас должна быть возможность установить цель развертывания в NIB, что затем вызовет отображение предупреждений для функций, которые не поддерживаются этой целью развертывания.

Кроме того, если вы еще этого не сделали, вам нужно сделать что-то подобное для настроек вашей целевой сборки. Задайте цель развертывания. К сожалению, это не обязательно вызовет предупреждения для кода, который использует функции, представленные в 10.7. Вы можете настроить альтернативную конфигурацию сборки, которая будет соответствовать 10.6 SDK и скомпилировать ее, чтобы узнать, где вы используете функции после 10.6. См. Руководство по совместимости SDK от Apple. больше информации.

person Ken Thomases    schedule 08.04.2012
comment
Большое спасибо! Ты спас мою задницу - person IluTov; 08.04.2012
comment
Я думаю, стоит упомянуть, что вы можете настроить цель развертывания своего пера так, чтобы Xcode сразу предупреждал о возникновении несовместимости. Однако вам нужно настроить каждое перо в своем проекте индивидуально. Я получал эту ошибку, и хотя я знал, что она связана с особенностями версии 10.7, причина, по которой она была упущена из виду, заключалась в том, что совместимость моего пера по-прежнему была установлена ​​на 10,8. - person dreamlax; 26.11.2012