UIWebview无法开始加载

时间:2012-12-12 17:19:13

标签: objective-c ios uiwebview

我正在为网站开发本机应用程序。该应用程序基本上是网站的包装器,它实现了推送通知等功能。单击推送通知时,将使用以下代码转到相应的页面:

- (NSString *)handlePush:(NSDictionary *)notification
{
    if ([[notification objectForKey:@"aps"] objectForKey:@"badge"]) {
        int badgeNum = [[[notification objectForKey:@"aps"] objectForKey:@"badge"] integerValue];
        NSLog(@"Badge: %i, got from %@", badgeNum, [[notification objectForKey:@"aps"] objectForKey:@"badge"]);
        [UIApplication sharedApplication].applicationIconBadgeNumber = badgeNum;
    }
    if (!active) {
        NSLog(@"Got noti while not active, going to that chat!");
        NSString *hash;
        if ((hash = [notification objectForKey:@"h"])) {
            NSLog(@"Hash: %@", [hash stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]);
            return [NSString stringWithFormat:@"#%@", hash];
        }
        return @"";
    }
    return nil;
}

当应用程序进入后台并恢复后,活动会更改,以确保在用户使用应用程序时推送通知到达时不会触发活动。 URL被正确解析,因为如果我在浏览器中手动粘贴完全相同的URL,我会转到正确的页面。

我100%确定委托已设置,因为UIWebView: ShouldStartLoadWithRequest方法被调用:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *url = [[request URL] absoluteString];

    NSLog(@"shouldStartLoadWithRequest called with url %@", url);

    if ([url hasPrefix:BASE_URL]) {
        NSLog(@"Yea, i'll load this one for ya");
        // remove any get-params / hash suffix
        NSRange r = [url rangeOfString:@"?"];
        if (r.location == NSNotFound)
            r = [url rangeOfString:@"#"];

        if (r.location != NSNotFound)
            url = [url substringToIndex:r.location];

        if (![url isEqualToString:[defaults valueForKey:@"baseUrl"]]) {
            NSLog(@"setting new baseUrl %@", url);

            [defaults setValue:url forKey:@"baseUrl"];
            [defaults synchronize];
        }

        NSLog(@"Should go and load it now...");
        return YES;
    } 
}

在那里缓存网页版本有一些逻辑。我介绍了断点,它到达return YES部分,并调用其中的日志。但是,在同一个委托中,不会调用didStartLoaddidFailLoadWithError,它们只包含NSLog。

在最初的应用程序启动时,这确实有效,并且它已经措辞了一段时间,我使用断点长时间步进,所以这似乎是一些时间问题。希望不必使用任何像计时器这样的hacky解决方案,我希望周围的人都有类似问题的经验,或者有任何其他宝贵的意见。

0 个答案:

没有答案