2011-04-08 349 views
0

我對使用NIB文件的時間和使用代碼的時間有點困惑。 這是我的問題:iPhone:筆尖文件+代碼=混淆

我有一個具有RootController和它的NIB文件的導航應用程序。 RootController的NIB文件包含一個TableView。 當我點擊一個單元格時,我用加載內容的請求初始化一個新的連接。 當連接完成加載我創建一個NIB文件的新postViewController(自定義)和我把它放在navigationController的viewController棧這樣的:

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文件中設置委託,但我不知道如何。從PostViewController的NIB文件並不瞭解RootViewController的...

下面是NIB文件的截圖:

RootViewController.xib

PostViewController.xib (File's Owner)

PostViewController.xib (Web View)

如果您需要更多細節只是問我。

非常感謝...幫助我不敲我的頭一天:)

+1

當您嘗試設置委託時,您是否檢查過存在postViewController.webview?我敢打賭它是零,因爲視圖尚未加載。如果是這樣的話,你必須找到另一種方法來設置你的RootVC作爲PostVC的Webview委託,就像在你的PostVC中使用一個屬性一樣,並且你的PostVC應該在ViewDidLoad方法中設置webview委託我認爲 – scalbatty 2011-04-08 15:27:20

+0

實際上,如果該筆尖的網點設置正確,webView不應該是零(我認爲)。也許在nib文件中有問題? – 2011-04-08 15:42:26

+0

@Luzal:你說得對,postViewController.webView是零,當我嘗試將它設置爲委託。我一直有這樣的問題,如果你有一些建議,讓我在這個問題上,我會很高興聽到他們... – teum 2011-04-11 08:14:56

回答

1

[postViewController.webView setDelegate:self];將針對電流控制器不postViewController委託。嘗試:

[postViewController.webView setDelegate:postViewController]; 

你可以把下面pushViewController:animated:這條線則應該已經存在的web視圖。

+0

如果您的目的是將RVC作爲委託,而不是罰款,但對於良好的MVC代碼設計,它應該對其自己的內容負責,而不是其他任何人。 – 2011-04-08 15:48:38

+0

我覺得也是這樣,這就是爲什麼我試圖這樣做,但後來我遇到了另一個問題(我現在記得......)。我提交了另一個問題[這裏](http://stackoverflow.com/questions/5619755/iphone-webviewshouldstartloadwithrequestnavigationtype-timing-problem)。 – teum 2011-04-11 10:10:42

+0

現在也解決了另一個問題,謝謝你的幫助。 – teum 2011-04-11 12:04:58

3

確保postViewController.webView不是零,當你調用它setDelegate:。還要確保它沒有在其他地方被調用,並確保代理插座沒有連接到NIB中的任何東西。

一對夫婦的其他意見:

  1. 這是一個有點不尋常使用你的根視圖控制器作爲web視圖的委託在這樣的情況下。它應該可以工作,但將這些委託方法下移到PostViewController中可能更有意義。從那裏你仍然可以攔截鏈接點擊並致電[self.navigationController pushViewController:animated:]

  2. [PostViewController release]正在釋放類對象。不是一個好主意。相反,你應該打電話給[postViewController release]

+0

是的,它是零。但它沒有被其他地方調用,代理插座沒有連接到我的NIB中的任何東西。 1.這就是我的想法,然後我試圖將所有內容都移動到PostViewController中,但是我無法將其視爲Web視圖委託。我不記得我在哪裏以及如何(可能有什麼錯誤),我改變了一切,因爲它沒有工作。 2. True:o(或者我應該說YES) – teum 2011-04-11 08:48:47

+0

事實上,當我將所有內容移動到PostViewController時,它都有效,但我遇到了另一個問題。我提交了另一個問題[這裏](http://stackoverflow.com/questions/5619755/iphone-webviewshouldstartloadwithrequestnavigationtype-timing-problem)。 – teum 2011-04-11 10:12:33

+0

現在也解決了另一個問題,謝謝你的幫助。 – teum 2011-04-11 12:05:17