Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS:Webview在导航到另一个控制器时导致flicking_Iphone_Uiwebview_Load_Ios5.1 - Fatal编程技术网

Iphone iOS:Webview在导航到另一个控制器时导致flicking

Iphone iOS:Webview在导航到另一个控制器时导致flicking,iphone,uiwebview,load,ios5.1,Iphone,Uiwebview,Load,Ios5.1,我在UIVIewController中使用webview,并使用以下方法在其中加载本地HTML文件 [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:filePath]]]; 如果我把这个方法放在ViewDidLoad中,我可以在导航到我的控制器时看到白色的轻弹,这看起来不太好 我试着把这个方法放在ViewWill中,如下所示。我使用webViewLoaded标志来确保webview已加载,然

我在UIVIewController中使用webview,并使用以下方法在其中加载本地HTML文件

[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:filePath]]];
如果我把这个方法放在ViewDidLoad中,我可以在导航到我的控制器时看到白色的轻弹,这看起来不太好

我试着把这个方法放在ViewWill中,如下所示。我使用webViewLoaded标志来确保webview已加载,然后仅显示当前视图,否则它将等待,但它将进入无限等待循环

- (void)viewWillAppear:(BOOL)animated {
    webViewLoaded = NO;

    webView.scalesPageToFit = allowZoom;
    webView.dataDetectorTypes = UIDataDetectorTypeNone;
    webView.delegate = self;

   [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:filePath]]];

   int count = 0;

   while(webViewLoaded == NO) 
   {
        NSLog(@"Waiting...");
        [NSThread sleepForTimeInterval:0.1];
        if(count++ > 10) break;
   }
}

- (void)webViewDidFinishLoad:(UIWebView *)localwebView {
    webViewLoaded = YES;
}
我也在ViewDidLoad中尝试过同样的方法,但它仍然在无限循环中运行

请注意,webViewLoaded是“volatile BOOL”,但不会调用webview委托方法。不知道发生了什么事

谁能帮我修一下吗。谢谢。

使用以下代码

[self performSelectorInBackground:@selector(webViewLoaded) withObject:nil];
为了不影响用户界面,请使用以下代码

[self performSelectorInBackground:@selector(webViewLoaded) withObject:nil];

为了不影响您的UI,请尝试使用
[NSURL fileURLWithPath:filePath]
首先尝试使用
[NSURL fileURLWithPath:filePath]
:您正在阻止主线程,并且没有给WebView任何完成加载的机会。永远不要阻塞你的主线程

第二个:有两种UIWebView委托方法:webViewDidFinishLoad和webView:didFailLoadWithError:-确保同时侦听这两种方法

如果您试图等待WebView完成加载并在加载后仅显示控制器,请使用委派或块。请注意,这不是一种正确的做法-我只是修改您的示例以使其正常工作:

子控制器(带WebView):

主控制器:

-(void)doSomething {
   SecondController * ctrl; /// secondController should be created AND has its view loaded at this point
   /// ctrl = [SecondController new];
   /// ctrl.view;
   [ctrl startLoadingWithParent:self];
   /// show user that we're doing something - display activity indicator or something
 }

 -(void)showMe:(UIViewController*)me {
    [self.navigationController pushViewControllerAnimated:me];
 }

首先:您正在阻止主线程,并且没有给WebView任何完成加载的机会。永远不要阻塞你的主线程

第二个:有两种UIWebView委托方法:webViewDidFinishLoad和webView:didFailLoadWithError:-确保同时侦听这两种方法

如果您试图等待WebView完成加载并在加载后仅显示控制器,请使用委派或块。请注意,这不是一种正确的做法-我只是修改您的示例以使其正常工作:

子控制器(带WebView):

主控制器:

-(void)doSomething {
   SecondController * ctrl; /// secondController should be created AND has its view loaded at this point
   /// ctrl = [SecondController new];
   /// ctrl.view;
   [ctrl startLoadingWithParent:self];
   /// show user that we're doing something - display activity indicator or something
 }

 -(void)showMe:(UIViewController*)me {
    [self.navigationController pushViewControllerAnimated:me];
 }

webViewLoaded只是一个标志..不是一个方法!我猜如果我在后台加载webview,我会看到白色的flicking,直到加载webview为止!webViewLoaded只是一个标志..不是一个方法!我猜如果我在后台加载webview,我会看到白色的flicking,直到加载webview为止!引发异常---[NSURL\u CFURLRequest]:发送到实例***的未识别选择器由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[NSURL\u CFURLRequest]:发送到实例0x4ce2980的未识别选择器'能否打印出“文件路径”中包含的内容variable/var/mobile/Applications/../Documents/web1.htmlrows异常---[NSURL\u CFURLRequest]:发送到实例的未识别选择器***由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:'-[NSURL\u CFURLRequest]:发送到实例0x4ce2980的未识别选择器“能否打印出“filePath”变量/var/mobile/Applications/../Documents/web1.htmlI执行了此操作,但未起作用!未调用任何webview委托。当我推送控制器和所有视图循环方法(viewdidload、ViewDidIspect等)时,它实际上开始加载退出!请查看doSomething中的注释行。您必须确保您的视图在此点加载。您的意思是什么?在调用loadWebview之前,我正在调用“loadview”方法。您能告诉我如何加载视图,但如果有其他方法,则不显示它吗?谢谢!从文档中-loadView:您不应该直接调用此方法。“。只需以某种方式访问视图(例如ctrl.view)以使其加载我这样做了,但没有起作用!没有调用任何webview委托。当我按下控制器和所有视图循环方法(viewdidload、ViewDidIspect等)时,它实际上开始加载。”退出!请查看doSomething中的注释行。您必须确保您的视图在此点加载。您的意思是什么?在调用loadWebview之前,我正在调用“loadview”方法。您能告诉我如何加载视图,但如果有其他方法,则不显示它吗?谢谢!从文档中-loadView:您不应该直接调用此方法。“。只需以某种方式访问视图(例如ctrl.view)即可使其加载