菜鸟教程小白 发表于 2022-12-12 16:25:40

iphone - 为什么我的应用内浏览器没有加载?


                                            <p><p>我想创建一个自定义应用内浏览器以在我的应用内显示它。</p>

<p>我的架构如下所示:
UIViewController 的子类:uiviewcon
从它的 Nib 加载:</p>

<ul>
<li>UIWebView</li>
<li>带有 UI 元素的顶部和底部栏,例如前进、后退……</li>
</ul>

<p>在我实例化 uiviewcon 之后,我在上面调用以下方法:</p>

<pre><code>-(void)loadrequest:(NSURLRequest *)urlrequest{
    ;
}
</code></pre>

<p>webview 是我 Nib 中 UIWebView 的 IBOutlet。但是似乎 webView 是 nil (我通过 if(webView)... 进行了检查,并且我肯定已经在 IB 中连接了它)</p>

<p>我的 webView 没有被分配的可能原因是什么?我也在 uiviewcon 中实现了 UIWebViewDelegate 协议(protocol)的一些方法(在 uiviewcon 的 viewDidLoad 中将 self 设置为委托(delegate)),但这些方法都没有被调用(似乎合理,因为 webView 为 nil)。</p>

<p>如何改进我的代码,以便我的浏览器最终加载一些东西?</p>

<p>编辑:我的 uiviewcon 标题:</p>

<pre><code>@protocol CustomWebViewDelegate
-(void)hidecustomwebview;
@end

@interface CustomWebView : UIViewController&lt;UIWebViewDelegate&gt; {
    UIActivityIndicatorView *spinner;
    UIWebView *webView;
}
@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *spinner;
@property (nonatomic, retain) IBOutlet UIWebView *webView;
@property (nonatomic,assign) id &lt;CustomWebViewDelegate&gt;delegate;
-(void)webViewDidStartLoad:(UIWebView *)webView;
-(void)webViewDidFinishLoad:(UIWebView *)webView;
-(void)loadrequest:(NSURLRequest *) urlrequest;
-(IBAction)hideme;
@end
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的 View 元素仅在需要时才被实例化。这意味着对 Controller 的 <code>view</code> 属性的第一次引用(内部来自 UIKit 或代码中任何地方对“self.view”的引用)会触发实际创建你在你的 Nib 。 </p>

<p>所以在上述过程发生之前,您的 <code>webView</code> 属性将为 nil。您很可能在实例化 View 之前调用了 <code>loadRequest</code>。您的问题的解决方案是在调用 <code>loadRequest</code> 时简单地更改。</p>

<p>那么调用 loadRequest 的正确时间是什么时候?有三种可能:</p>

<p>1) 如果您从 CustomWebView 内部调用 loadRequest,您可以将该代码放入 <code>viewDidLoad</code></p>

<p>2) 如果您必须从 CustomWebView 外部调用 loadRequest,您可以等待您第一次展示该 Controller (例如使用 <code>presentModalViewController:animated:</code> 或将您的 Controller 推送到导航上stack) 然后调用 loadRequest。</p>

<p>所以你的代码可能看起来像:</p>

<pre><code>NSURLRequest *someRequest = nil; //Assume this has some valid value

CustomWebView *myWebView = [ init]; //Plus other nib niceties
;
;                     //View has been created,
                                                         //loadRequest will work.
</code></pre>

<p>而不是原来的样子:</p>

<pre><code>NSURLRequest *someRequest = nil; //Assume this has some valid value

CustomWebView *myWebView = [ init]; //Plus other nib niceties
;                     //Your view is not created yet, loadRequest won&#39;t work.
;            
</code></pre>

<p>3) 如果您无法执行上述操作,并且无论您何时选择 <code>presentModalViewController</code> 或 <code>pushViewController</code>,都必须能够在任何时间点调用 loadRequest,则永远是拯救世界的黑客:)</p>

<p>hack 是,只需引用 CustomWebView 的 init 方法中的 <code>self.view</code>,您就可以确信 View 已经在“init”之后设置好了。你如何引用 <code>self.view</code> 并不重要,即使像 <code></code> 这样的东西也可以。就像我说的,没关系。</p>

<p>这是一个相当简单的问题,但我想在这里列出所有选项,因为这是我过去常犯的一个相当常见的错误。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 为什么我的应用内浏览器没有加载?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/6198778/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/6198778/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 为什么我的应用内浏览器没有加载?