Попытка выдвинуть к подробному представлению с Xcode 4.2 iOS 5 от UIWebView - PullRequest
1 голос
/ 07 ноября 2011

У меня есть ViewController, встроенный в NavigationController. 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 #import

@interface SingleStoryViewController : UIViewController

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

@end

Вот ссылка на изображение моей раскадровки Xcode, для чего оно стоит: http://i.imgur.com/I653v.png

Я работаю над этим уже добрых 14-16 часов, и наконец я говорю «дядя» и прошу помощи. Буду признателен за любую помощь, я очень новичок в программировании на iOS, поэтому я прошу прощения, если есть что-то действительно глупое, что я пропускаю.

1 Ответ

1 голос
/ 07 ноября 2011

Как видите, он "загружает" новый вид ...

Это не то, что говорит ошибка. Ошибка говорит это:

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

Я бы начал с проверки имени .xib-файла в вашем приложении - похоже, оно не совпадает с именем, которое вы используете в коде.

Обновление: Согласно комментариям ниже, оказывается, что это приложение использует раскадровки и не содержит никаких файлов .xib, поэтому неудивительно, что попытка загрузить контроллер представления из .xib приводит к ошибка. Правильный способ загрузки контроллера представления из раскадровки при необходимости - использовать метод -instantiateViewControllerWithIdentifier: в UIStoryboard вместо -initWithNibName:bundle:.

в UIViewController.
...