ios - NSURLErrorDomain错误-999 IOS7

标签 ios ios7 uiwebview

我尝试在ios应用中打开网页时正在尝试解决此问题。在ios7之前,它工作得很完美,但是现在我们正在升级应用程序,这是我们唯一的严重问题。

关于此问题,我发现它是在两次调用时产生的。我认为这是这里发生的事情,因为如果我在didFailLoadWithError中编写NSLog文本,它将显示两次。

我试着忽略该错误,但是加载圆圈显示为以太,并且网页未加载。

我在这里粘贴我的代码,也许您可​​以帮助我们或提供一些提示。

            #import "WebPoiViewController.h"
            #import "FavoriteManager.h"

            @interface WebPoiViewController ()

            @end

            @implementation WebPoiViewController
            @synthesize webView,urlStr, activityIndicator,title2,poi=_poi,position=_position;


            - (void)viewDidLoad { //We have a NIB file in play here, so I dropped the loadView here.  Just make sure that your loadView is not getting called twice!
                [super viewDidLoad];

                if (self.poi!=nil){
                    self.position = [[FavoriteManager sharedInstance] isPoiInFavoriteList:self.poi];

                    if (self.position==-1){

                        UIButton *button1 = [[UIButton alloc] init];
                        button1.frame=CGRectMake(0,0,30,30);
                        [button1 setBackgroundImage:[UIImage imageNamed: @"Favorites_icon_inactive.png"] forState:UIControlStateNormal];
                        [button1 addTarget:self action:@selector(makeFavorite:) forControlEvents:UIControlEventTouchUpInside];

                        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:button1];


                        //self.navigationItem.rightBarButtonItem= [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"Favorites_icon_inactive.png"]  style: UIBarButtonItemStylePlain target:self action:@selector(makeFavorite:)];
                    } else {

                        UIButton *button1 = [[UIButton alloc] init];
                        button1.frame=CGRectMake(0,0,30,30);
                        [button1 setBackgroundImage:[UIImage imageNamed: @"Favorites_icon.png"] forState:UIControlStateNormal];
                        [button1 addTarget:self action:@selector(deleteFavorite:) forControlEvents:UIControlEventTouchUpInside];

                        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:button1];
                        //self.navigationItem.rightBarButtonItem= [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"Favorites_icon.png"]  style: UIBarButtonItemStylePlain target:self action:@selector(deleteFavorite:)];
                    }
                }

                if (nil!=title2&& ![title2 isEqualToString:@""]){
                    self.title=self.title2;
                }
                [self loadView];
            }

            - (IBAction)makeFavorite:(id)sender {
                self.position=[[FavoriteManager sharedInstance] addFavotitePOI:self.poi];
                UIButton *button1 = [[UIButton alloc] init];
                button1.frame=CGRectMake(0,0,30,30);
                [button1 setBackgroundImage:[UIImage imageNamed: @"Favorites_icon.png"] forState:UIControlStateNormal];
                [button1 addTarget:self action:@selector(deleteFavorite:) forControlEvents:UIControlEventTouchUpInside];

                self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:button1];

            }

            - (IBAction)deleteFavorite:(id)sender {
                [[FavoriteManager sharedInstance] deleteFavotitePOIat:self.position];
                self.position=-1;
                UIButton *button1 = [[UIButton alloc] init];
                button1.frame=CGRectMake(0,0,30,30);
                [button1 setBackgroundImage:[UIImage imageNamed: @"Favorites_icon_inactive.png"] forState:UIControlStateNormal];
                [button1 addTarget:self action:@selector(makeFavorite:) forControlEvents:UIControlEventTouchUpInside];

                self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:button1];

            }

            - (void)loadView {
                UIView *contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
                self.view = contentView;    

                CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
                webFrame.origin.y = 0.0f;
                webView = [[UIWebView alloc] initWithFrame:webFrame];
                webView.backgroundColor = [UIColor blueColor];
                webView.scalesPageToFit = YES;
                webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
                webView.delegate = self;

                if([webView respondsToSelector:@selector(scrollView)]){
                    webView.scrollView.bounces = NO; 
                }

                [self.view addSubview: webView];
                if (nil!=self.urlStr && ![urlStr isEqualToString:@""]){
                    NSLog(@"NO ES NIL");
                    //[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.urlStr]]];

                    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]]];
                    activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
                    activityIndicator.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
                    //activityIndicator.center = self.view.center;
                    activityIndicator.center = CGPointMake(self.view.frame.size.width/2,self.view.frame.size.height/2);
                    [self.view addSubview: activityIndicator];
                } else{
                    [webView loadHTMLString:@"<html><center><br /><br /><font size=+5>No info<br /><br /></font></center></html>" baseURL:nil];

                }
            }


            #pragma mark WEBVIEW Methods

            - (void)webViewDidStartLoad:(UIWebView *)myWebView
            {
                // starting the load, show the activity indicator in the status bar
                [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
                [activityIndicator startAnimating];
            }

            - (void)webViewDidFinishLoad:(UIWebView *)myWebView
            {
                // finished loading, hide the activity indicator in the status bar
                [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
                [activityIndicator stopAnimating];
            }

            - (void)webView:(UIWebView *)myWebView didFailLoadWithError:(NSError *)error
            {
                if([error code] == NSURLErrorCancelled) return; // Ignore this error
                NSLog(@"FAIL");
                // load error, hide the activity indicator in the status bar
                [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

                // report the error inside the webview
                NSString* errorString = [NSString stringWithFormat:
                                         @"<html><center><br /><br /><font size=+5 color='red'>Error<br /><br />Your request %@</font></center></html>",
                                         error.localizedDescription];
                [webView loadHTMLString:errorString baseURL:nil];
            }

            - (void)didReceiveMemoryWarning{
                [super didReceiveMemoryWarning];
            }

            - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
            {
                return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
            }

            - (BOOL)shouldAutorotate {
                return [self.navigationController shouldAutorotate];
            }

            - (NSUInteger)supportedInterfaceOrientations {
                return [self.navigationController supportedInterfaceOrientations];
            }


            @end

最佳答案

我自己解决了。我想分享答案,因为它可能会帮助遇到相同问题的其他人。

我刚刚在didFailWithError中添加了以下代码:

    - (void)webView:(UIWebView *)myWebView didFailLoadWithError:(NSError *)error
    {
        if([error code] != NSURLErrorCancelled)  // only goes in if it is not -999
        {
        // load error, hide the activity indicator in the status bar
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

        // report the error inside the webview
        NSString* errorString = [NSString stringWithFormat:
                                 @"<html><center><br /><br /><font size=+5 color='red'>Error<br /><br />Your request %@</font></center></html>",
                                 error.localizedDescription];
        [webView loadHTMLString:errorString baseURL:nil];
        }
        else{
             [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.urlStr] ]];
        }
    }

现在,如果失败,它将尝试重复加载,直到加载为止。可以通过使用计数器进行改进。只需尝试5到10次,就不会像我的尝试了。

关于ios - NSURLErrorDomain错误-999 IOS7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21680034/

相关文章:

ios - 如何在 objective-c 中按下条形按钮时隐藏键盘

ios - Cookies.ttf 字体不能在 iOS 应用程序中使用?

UITextField占位符字符串在ios7中总是顶部对齐

html - 如何在 ios swift 中将本地 html 文件加载到字符串变量?

Cocoa webview windowScriptObject 保持强引用

objective-c - 自动释放 CFMutableDictionary

ios - 使用 Set 时,Swift 2.0 : Could not cast value MyApp. MyCustomClass 到 MyAppTests.MyCustomClass

ios - 最佳实践。通过支持 iOS 5、iOS 6 和 iOS 7 UI,使 iOS 应用程序变得通用

ios - 如何在 iOS 7 上的 UINavigationController 中禁用向后滑动手势

objective-c - 如何旋转 UIWebView 的内容?