【问题标题】:Trying to push to detail view with Xcode 4.2 iOS 5 from UIWebView尝试从 UIWebView 使用 Xcode 4.2 iOS 5 推送到详细视图
【发布时间】:2011-11-07 15:54:49
【问题描述】:

我在 NavigationController 中嵌入了一个 ViewController。 ViewController 有一个 UIWebView 我试图从中捕获链接。我能够拦截链接,但是当我尝试将链接内容推送到详细信息页面时,它似乎正在触发一个新的控制器,但它是不可见的。如果我再次单击一个链接(或者如果我只是单击第二个链接),我会看到一个后退按钮弹出,但新 ViewController 的实际内容再次不可见。

这是第一次链接点击的日志输出:

2011-11-07 10:38:27.526 WGGB[43875:f803] *** WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate:   <NSInternalInconsistencyException> Could not load NIB in bundle: 'NSBundle  </Users/sonnyjitsu/Library/Application Support/iPhone Simulator/5.0/Applications/4B3D5152-4EA5-4C84-BB22-A774FCB8B6A7/WGGB.app> (loaded)' with name 'Detail View'

如您所见,它正在“加载”新视图,但我在模拟器中什么也看不到。然后我第二次点击同一个链接(或点击一个新链接)我在日志中看到:

2011-11-07 10:38:30.605 WGGB[43875:f803] url is http://www.blahblahblah.com/mobile

有问题的方法是这样的:

-(BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{

    NSURL *url = request.URL;
    NSString *urlString = url.absoluteString;
    NSRange page = [ urlString rangeOfString: @"/mobile" ];
    if (page.location == NSNotFound) {

        SingleStoryViewController *detailViewController = [[SingleStoryViewController alloc] initWithNibName:@"Detail View" bundle:nil];
        NSString *requestURL = 
            [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
        [detailViewController.webView loadRequest:
            [NSURLRequest requestWithURL:[NSURL URLWithString:requestURL]]];
        [self.navigationController pushViewController:detailViewController animated:YES];

        NSLog(@"url is %@", url);
        return NO;
    } else {
        return YES;
    }
}

我的 SingleStoryViewController.m 的顶部

#import "SingleStoryViewController.h"

@implementation SingleStoryViewController

@synthesize webView;

整个 SingleStoryViewController.h #导入

@interface SingleStoryViewController : UIViewController

@property (weak, nonatomic) IBOutlet UIWebView *webView;

@end

这是我的 Xcode 故事板图片的链接,值得一看:http://i.imgur.com/I653v.png

我已经为此工作了 14 到 16 个小时,我终于要说“叔叔”并寻求帮助。任何帮助将不胜感激,我对 iOS 编程非常陌生,所以如果我遗漏了一些非常愚蠢的东西,我深表歉意。

【问题讨论】:

    标签: ios xcode uiwebview ios5 storyboard


    【解决方案1】:

    如您所见,它正在“加载”新视图...

    这不是错误所说的。错误是这样说的:

    Could not load NIB in bundle: [...] with name 'Detail View'
    

    我首先检查您应用中的 .xib 文件的名称——听起来它可能与您在代码中使用的名称不匹配。

    更新: 根据下面的 cmets,事实证明这是应用程序使用故事板并且不包含任何 .xib 文件,因此尝试从 .xib 加载视图控制器也就不足为奇了产生错误。必要时从故事板加载视图控制器的正确方法是使用 UIStoryboard 的 -instantiateViewControllerWithIdentifier: 方法而不是 UIViewController 的 -initWithNibName:bundle:

    【讨论】:

    • 我想我对此有点困惑,因为我使用的是故事板,所以我的项目中没有任何 .xib。
    • 我自己还在掌握故事板的窍门。您的错误现在更有意义:由于没有任何 .xib,因此尝试从 .xib 加载视图控制器显然是行不通的。使用 UIStoryboard 的 -instantiateViewControllerWithIdentifier: 方法从情节提要加载视图控制器,而不是 -initWithNibName:bundle:。不过,通常情况下,您只需在情节提要中创建转场,而不是自己实例化视图控制器。
    • 好的,我越来越近了!我已将创建 ViewController 对象的代码更改为如下所示:SingleStoryViewController *detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"SingleStoryView"]; 但现在我只是得到一个空白屏幕,仍然没有 Web 内容。我还必须单击我的 ViewController,单击属性检查器并将标识符更改为 SingleStoryView。
    • Caleb,如果您修改答案以包含带有 instantiateViewControllerWithIdentifier 的信息,我会继续接受它。
    • @SonnyParlin,我已经更新了答案——很高兴它让你更接近工作代码。我在您的网络视图中检查的第一件事是 URL 是否正确并且您有网络连接;之后,开始查看委托方法返回的信息。也许我们在这里误入了另一个问题......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多