2014-02-06 3 views
0

Я потратил несколько часов на поиск решения этой проблемы, но я даже не могу найти никого, кто испытал это, не говоря уже о решении.UIWebView внутри диспетчера навигации падает при вводе

В моем проекте у меня есть контроллер главного представления, который выталкивает второй контроллер представления, содержащий UIWebView. Оба контроллера просмотра встроены в контроллер навигации. Push-сегу и WebView подключаются с помощью IB.

Сегмент происходит так, как ожидалось, и веб-страница загружается и работает нормально, пока я не попытаюсь ввести. При нажатии на текстовое поле вызывает клавиатуру, но первое нажатие происходит сбой приложения и выдает ошибку:

-[NSNull length]: unrecognized selector sent to instance 0x1899068 
2014-02-06 04:37:19.550 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x1899068' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0174d5e4 __exceptionPreprocess + 180 
    1 libobjc.A.dylib      0x014d08b6 objc_exception_throw + 44 
... 

Это происходит как в тренажере и на устройстве. Меня особенно смущает, потому что я не делаю ничего сложного. В контроллере представления, который содержит WebView, у меня есть следующий viewDidLoad:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

    [self.webView loadRequest:request]; 
} 

и никаких других кодов. Google используется в качестве примера здесь, но это происходит на каждом сайте, который я пробовал. Странно то, что если я удалю segue и представим веб-представление без родительского контроллера навигации, все будет хорошо, поэтому похоже, что контроллер nav имеет какое-то отношение к нему. Как я уже сказал, свойство webView подключается как выход IB. Я также попытался добавить его программно, но результат был таким же. Насколько я могу ничего не сказать в своем первом представлении, диспетчер должен иметь какое-либо влияние на это; как я сказал, это отрыв от игры. Я могу быть уверен, что передача длины в NSNull не является чем-то, что я делаю непосредственно сам, поскольку я не использую селектор длины в любом месте моего кода.

Любая помощь была бы принята с благодарностью.

Было предложено так сообщение полная ошибка заключается в следующем:

-[NSNull length]: unrecognized selector sent to instance 0x1899068 
2014-02-06 05:18:29.607 AppName[859:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x1899068' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0174d5e4 __exceptionPreprocess + 180 
    1 libobjc.A.dylib      0x014d08b6 objc_exception_throw + 44 
    2 CoreFoundation      0x017ea903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275 
    3 CoreFoundation      0x0173d90b ___forwarding___ + 1019 
    4 CoreFoundation      0x0173d4ee _CF_forwarding_prep_0 + 14 
    5 CoreFoundation      0x016cd95c CFStringGetLength + 140 
    6 CoreFoundation      0x016e1284 CFStringCompareWithOptionsAndLocale + 52 
    7 Foundation       0x010db634 -[NSString compare:options:range:locale:] + 175 
    8 Foundation       0x010db580 -[NSString compare:options:range:] + 69 
    9 Foundation       0x010eda59 -[NSString caseInsensitiveCompare:] + 80 
    10 UIKit        0x00454f48 -[UIPhysicalKeyboardEvent _matchesKeyCommand:] + 280 
    11 UIKit        0x00398ac9 -[UIResponder(Internal) _keyCommandForEvent:] + 312 
    12 UIKit        0x00398b3b -[UIResponder(Internal) _keyCommandForEvent:] + 426 
    13 UIKit        0x00398b3b -[UIResponder(Internal) _keyCommandForEvent:] + 426 
    14 UIKit        0x00398b3b -[UIResponder(Internal) _keyCommandForEvent:] + 426 
    15 UIKit        0x00398b3b -[UIResponder(Internal) _keyCommandForEvent:] + 426 
    16 UIKit        0x00398b3b -[UIResponder(Internal) _keyCommandForEvent:] + 426 
    17 UIKit        0x00398b3b -[UIResponder(Internal) _keyCommandForEvent:] + 426 
    18 UIKit        0x00398b3b -[UIResponder(Internal) _keyCommandForEvent:] + 426 
    19 UIKit        0x00398b3b -[UIResponder(Internal) _keyCommandForEvent:] + 426 
    20 UIKit        0x00252176 -[UIApplication handleKeyHIDEvent:] + 226 
    21 UIKit        0x0023a07c _UIApplicationHandleEventQueue + 2954 
    22 CoreFoundation      0x016d683f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15 
    23 CoreFoundation      0x016d61cb __CFRunLoopDoSources0 + 235 
    24 CoreFoundation      0x016f329e __CFRunLoopRun + 910 
    25 CoreFoundation      0x016f2ac3 CFRunLoopRunSpecific + 467 
    26 CoreFoundation      0x016f28db CFRunLoopRunInMode + 123 
    27 GraphicsServices     0x036f29e2 GSEventRunModal + 192 
    28 GraphicsServices     0x036f2809 GSEventRun + 104 
    29 UIKit        0x0023ed3b UIApplicationMain + 1225 
    30 AppName        0x00003d3d main + 141 
    31 libdyld.dylib      0x01d8b70d start + 1 
    32 ???         0x00000001 0x0 + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
+0

Вы пытались добавить точку останова для всех исключений? и если все еще не удается выяснить, возможно, вставьте все коды вокруг точки останова. Нам было бы легче помочь вам. –

+0

@XuYin Я просто попробовал это, и я думаю, что проблема исходит из рамки? Весь код, отображаемый после разлома, представляет собой нагрузку сборки. Я определенно не отправляю длину в любом месте своего кода. – deergomoo

+0

Не могли бы вы вставить все сообщение об ошибке? –

ответ

0

@deergomoo извините за мой первый ответ. Я вымываю это как ложное.

Итак, что вы думаете о следующем примере? Это похоже на вашу структуру проекта? Я не могу найти аварии.

@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UINavigationController *navController=[UINavigationController new]; 
    ViewController *viewController=[[ViewController alloc] init]; 
    [navController pushViewController:viewController animated:NO]; 
    self.window.rootViewController = navController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

.

#import "ViewController.h" 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds 
                  style:UITableViewStylePlain]; 
    tableView.delegate = self; 
    tableView.dataSource = self; 
    [self.view addSubview:tableView]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return 1; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault 
                reuseIdentifier:nil]; 
    cell.textLabel.text = @"Cell"; 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"didSelectRowAtIndexPath"); 
    UIViewController *viewController = [UIViewController new]; 
    UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; 
    [viewController.view addSubview:webView]; 

    NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

    [webView loadRequest:request]; 

    [self.navigationController pushViewController:viewController animated:TRUE]; 
} 

@end 
+0

К сожалению, это не проблема с загрузкой страницы. Ожидание до тех пор, пока webViewDidFinishLoad: пожары не остановят краш. И наоборот, представление веб-представления, когда оно не находится в контроллере навигации, не падает, даже когда страница не закончила загрузку. Спасибо за ваше время. – deergomoo

1

Так что мне удалось это исправить, не делая ничего. Что в конечном итоге было исправлено, это удаление контроллера навигации, в которое были встроены все VC, а затем встраивание их обратно в контроллер Nav. Теперь он работает полностью. Поэтому я не знаю, было ли это странное положение или что.

+0

У меня есть tabbarcontroller у корня и 3 navcontrollres с ними. Я удалил navcontroller из первого контроллера tableview и повторно добавил его, и это ничего не изменило. Я добавил новый диспетчер tableview в новом контроллере управления tabbar и все еще. Кажется, это проблема файла раскадровки, а не отдельных сцен или контроллеров. Любые идеи приветствуются. – marciokoko

0

В моем случае я предполагаю, что мой контроллер панели вкладок стал коррумпированным в моем раскадровке. Мне пришлось удалить из него все выходы контроллера. Удалите контроллер панели вкладок. Очистите проект. Добавьте новый контроллер панели вкладок и повторно подключите все розетки. Затем я перестала видеть этот крах.

Я просто упомянул об этом, чтобы он помог кому-то другому.

Смежные вопросы