iPhone: файл пера + код = перепутать - PullRequest
0 голосов
/ 08 апреля 2011

Я немного запутался, когда мне следует использовать файл NIB и когда мне следует использовать код. Вот моя проблема:

У меня есть приложение на основе навигации с RootController и его NIB-файлом. Файл NIB RootController содержит TableView. Когда я нажимаю на ячейку, я инициализирую новое соединение с запросом на загрузку контента. После завершения загрузки соединения я создаю новый postViewController (custom) из файла NIB и помещаю его в стек viewController navigationController следующим образом:

PostViewController *postViewController = [[PostViewController alloc] initWithNibName:@"PostViewController" bundle:[NSBundle mainBundle]]; 

[postViewController.webView setDelegate:self];

postViewController.postContent = [[postsData objectForKey:@"post"] objectForKey:@"content"];

[self.navigationController pushViewController:postViewController animated:YES];

[PostViewController release];

Затем, как вы можете видеть, я пытаюсь установить rootViewController в качестве делегата для webView, чтобы иметь возможность перехватывать щелчок по ссылке и помещать новый ViewController в стек. Мне нужно, чтобы это новое представление имело панель навигации с кнопкой возврата.

Проблема: похоже, что setDelegate не работает, потому что webView: shouldStartLoadWithRequest: navigationType никогда не вызывается!

Полагаю, мне следует установить делегата в файле NIB, но я понятия не имею, как. Файл NIB из PostViewController не знает о RootViewController ...

Вот скриншоты файлов NIB:

RootViewController.xib

PostViewController.xib (File's Owner)

PostViewController.xib (Web View)

Если вам нужно больше деталей, просто спросите меня.

Большое спасибо ... за то, что помог мне не биться в голову еще один день:)

Ответы [ 2 ]

3 голосов
/ 08 апреля 2011

Убедитесь, что postViewController.webView не ноль, когда вы звоните на setDelegate:. Также убедитесь, что он не вызывается нигде, и убедитесь, что выход делегата не подключен ни к чему в вашей NIB.

Пара других комментариев:

  1. Немного необычно использовать ваш корневой контроллер представления в качестве делегата веб-просмотра в таком случае. Это должно работать, но, возможно, имеет смысл переместить эти методы делегатов в ваш PostViewController. Оттуда вы все еще можете перехватывать щелчки по ссылке и звонить [self.navigationController pushViewController:animated:].

  2. [PostViewController release] освобождает объект класса. Не хорошая идея. Вместо этого вы должны звонить [postViewController release].

1 голос
/ 08 апреля 2011

[postViewController.webView setDelegate:self]; устанавливает делегата для текущего контроллера не postViewController.Попробуйте:

[postViewController.webView setDelegate:postViewController];

И вы можете поместить эту строку ниже pushViewController:animated:, тогда WebView уже должен существовать.

...