Я добавил WebView в мое приложение Cocoa, и он генерирует ошибку

Я добавил WebView в свое приложение, и я загружаю в него страницу, используя этот код:

-(void)awakeFromNib{
    NSString *resourcesPath = [[NSBundle mainBundle] resourcePath];
    NSString *htmlPath = [resourcesPath stringByAppendingString:@"/calendarHTML/test.html"];
    [[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:htmlPath]]]; 
}

Однако, когда я запускаю приложение, я получаю следующую ошибку:

Layout still needs update after calling -[WebHTMLView layout].  
WebHTMLView or one of its superclasses may have overridden 
-layout without calling super. Or, something may have dirtied 
layout in the middle of updating it.  Both are programming errors in 
Cocoa Autolayout.  The former is pretty likely to arise if some 
pre-Cocoa Autolayout class had a method called layout, but it should be fixed.!

error log

Что вызывает эту проблему?

Ответ 1

Это связано с тем, что nib, содержащий окно, в которое вы разместили WebView, использует новую функцию Auto Layout, введенную в Льве.

Когда файл nib имеет автоматическое расположение, окно вызывает метод -layout для всех объектов NSView в окне.

Это вызывает проблему с WebView, потому что у него был метод с именем -layout, прежде чем он был добавлен в API NSView в Lion, а метод WebView layout не понимает автоматическую компоновку.

Наверное, лучшим решением на данный момент является использование старого метода маскировки авторазмера для размещения представлений в вашем окне. Поскольку Xcode теперь создает файлы nib с включенным автозапуском, вам необходимо отключить его самостоятельно.

Вы можете сделать это в Инспекторе файлов для вашего файла nib, отключив флажок Use Auto Layout.

interface builder inspector

После этого вам нужно убедиться, что все представления в nib имеют правильные параметры авторазрешения на вкладке "Размер" инспектора вида.

Ответ 2

Обратите внимание, что вы можете смело игнорировать это сообщение журнала для WebView.

Ответ 3

Я не уверен в случае с WebView, но если вы используете какой-либо пользовательский класс (например, подкласс UILabel), и вы используете метод:

  • (недействительный) updateConstraints { }

то определенно это приведет к сбою вашего приложения. Лучшим решением является удаление этого метода и запись необходимых изменений в метод 'awakeFromNib'. Надеюсь, что это поможет кому-то другому, кто получает этот крах в обычном классе.