【问题标题】:I added a WebView to my Cocoa app and it's generating an error我在我的 Cocoa 应用程序中添加了一个 WebView,它正在生成一个错误
【发布时间】:2012-04-19 00:47:11
【问题描述】:

我在我的应用中添加了一个 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.!

是什么导致了这个问题?

【问题讨论】:

    标签: objective-c xcode macos cocoa


    【解决方案1】:

    这是因为包含您放置 WebView 的窗口的 nib 使用了 Lion 中引入的新 Auto Layout 功能。

    当 nib 文件启用自动布局时,窗口将对窗口中的所有 NSView 对象调用 -layout 方法。

    这会导致WebView 出现问题,因为它之前有一个名为-layout 的方法,该方法被添加到Lion 中的NSView API,并且WebViewlayout 方法不理解自动布局.

    目前最好的解决办法可能是使用旧的自动调整大小蒙版方法在窗口中布置视图。由于 Xcode 现在创建启用了自动布局的 nib 文件,因此您需要自己禁用它。

    您可以在 nib 文件的文件检查器中执行此操作,方法是禁用 Use Auto Layout 复选框。

    完成此操作后,您需要确保 nib 中的所有视图在视图检查器的“大小”选项卡中都具有正确的自动调整大小设置。

    【讨论】:

      【解决方案2】:

      请注意,您可以放心地忽略 WebView 的日志消息。

      【讨论】:

        【解决方案3】:

        我不确定WebView 的情况,但如果您使用任何自定义类(如UILabel 的子类)并且您正在使用该方法:

        - (void)updateConstraints
        {
        
        }
        

        那么它肯定会让你的应用崩溃。最好的解决方案是删除此方法并在 'awakeFromNib' 方法中写入所需的更改。希望这对在自定义类中遇到此崩溃的其他人有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-16
          • 2020-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多