【问题标题】:load webview content in the initializer在初始化程序中加载 webview 内容
【发布时间】:2011-02-17 22:47:12
【问题描述】:

这是一个 iPad 应用程序。您按下两个按钮之一,它会显示一个模态视图控制器,其中包含一个将显示 PDF 的 web 视图。我创建了包含 webview 的 UIViewController 类,并且我想根据用户按下的按钮使用 2 个初始化程序中的 1 个。当我初始化对象时,我想设置显示哪个 PDF。模式视图即将出现,但它是空白的(不显示 PDF)。但是,当我在 -(void)viewDidLoad{} 中使用相同的代码时,它确实有效。为什么是这样?谢谢!

 - (id)initAsPi{
    NSLog(@"initAsPi Called");
    [super init];
    NSString *urlAddress = [[NSBundle mainBundle] pathForResource:@"PiPdf" ofType:@"pdf"];
    NSURL *url = [NSURL fileURLWithPath:urlAddress];
    NSURLRequest *urlRequestObj = [NSURLRequest requestWithURL:url];
    [prescribingInfoWebView loadRequest:urlRequestObj];
    return self;
    }

【问题讨论】:

    标签: objective-c cocoa-touch


    【解决方案1】:

    初始化

    您的初始化方法错误。阅读实现初始化程序 - 处理初始化失败 ...

    http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocAllocInit.html%23//apple_ref/doc/uid/TP30001163-CH22-105377

    它应该看起来像......

    - (id)initAsPi {
      self = [super init];
      if ( self ) {
        // Your initialization code
      }
      return self;
    }
    

    为什么它在 viewDidLoad 中有效,而在 initAsPi 中无效?

    prescribingInfoWebView 为 nil,除非您在其他地方做一些晦涩的事情。

    您可能在 loadView 方法中创建 prescribingInfoWebView,或者如果您从 XIB 加载视图,它会在视图加载期间自动初始化。

    【讨论】:

      【解决方案2】:

      当视图控制器的 init 方法被执行时,它还没有加载它的视图。所以prescribingInfoWebView此时可能是nil(你应该用调试器检查),所以你试图发送给它的消息没有效果。

      【讨论】:

        【解决方案3】:

        UIViewController 会延迟加载它们的接口。这意味着在 Interface Builder 或 -loadView 中设置的任何 UI 属性都将为零,直到对视图的某些请求导致它加载。在您的初始化程序中,这几乎肯定是问题所在。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-17
          • 2015-07-07
          • 1970-01-01
          • 2010-10-02
          • 1970-01-01
          • 2014-01-18
          • 1970-01-01
          相关资源
          最近更新 更多