2010-03-23 63 views
2

我想玩WebView。定義的插座,連接它們,它們都返回(空)

我做了一個出口:

IBOutlet UIWebView *browser; 

將它定義爲一個屬性:

@property (nonatomic, retain) IBOutlet UIWebView *browser; 

Synthethized它:

@synthesize browser; 

最後,我在Interface Builder連接它,實際上它是。

然後我試着用它做什麼,即:

[browser loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://apple.com"]]]; 

或者也:

Etape *etape = [[Etape alloc] init]; 

NSString *html = [etape generateHTMLforEtape:[current_etape objectAtIndex:0]]; 
[browser loadHTMLString:html baseURL:nil]; 

[etape release]; 

我沒有錯誤,我試圖建立&分析,沒有任何通知或警告或錯誤。我一直在尋找一整天,請幫助我:/

非常感謝!

編輯:這是我爲我的WebView連接的屏幕截圖: Connections http://pousli.net/uploads/crap/outlet.png

編輯:這就是我所說的觀點:

DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]]; 

    dvController.workflow_id = parent_id; 

    Etape *etape = [[Etape alloc] init]; 
    dvController.etapes = [etape getEtapes:parent_id]; 
    [etape release]; 

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

    [dvController release]; 
+0

你看到的究竟是什麼? webview永遠不會出現嗎?它是否顯示,但不加載HTML?它失敗的方式會告訴我們問題在哪裏。 – TechZen 2010-03-23 14:43:13

+0

@ TechZen:我看到webview,根本沒有錯誤。一切都很好,唯一的問題是我的連接不起作用。瀏覽器對象存在但是(空)...:/謝謝! – TomShreds 2010-03-23 14:49:52

+0

如果瀏覽器顯示但屬性爲空,那麼無論出於何種原因它都不會在IB中鏈接。那隻會導致這種行爲模式。 (除了實際設置屬性爲空。) – TechZen 2010-03-23 17:36:14

回答

3

的幾點思考:

取決於哪種方法你'運行這個代碼,網點可能還沒有被連接。在致電super的實施之後,開始與您的網點進行互動的最常見地點是viewDidLoad,viewWillAppear:viewDidAppear:方法。如果您嘗試在init方法中執行此操作,您的網點可能仍然是nil。筆尖沒有加載,直到有人請求您的視圖控制器的view時,插座才被連接。這可能是你正在經歷的?

如果你在NSLog(@"%@", browser);的方法中,你知道該視圖應該存在,但得到(null)記錄,那麼這是一個跡象表明你的網點已經失去了他們的連接。

編輯#1確定您打電話給initWithNibName:bundle:時,您的xib拼寫正確嗎? (順便說一句,你可以在nil通過捆綁包,它將承擔[NSBundle mainBundle]

+0

@Dave DeLong:我的示例目前位於: - (void)viewDidLoad {},所以這不應該是一個問題。 但是,如果我NSLog我的瀏覽器對象我目前得到︰(null) 這真的很奇怪...感謝您的幫助 – TomShreds 2010-03-23 14:00:10

+0

是的我有正確的(我仔細檢查)...謝謝 – TomShreds 2010-03-23 14:29:50

1

一件事是,你可能有它的有線到@property或到IBOutlet中(在我的經驗Interface Builder中被很容易混淆)。也許嘗試聲明爲:

UIWebView *browser_; 
@property (nonatomic, retain) IBOutlet UIWebView *browser; 
@synthesize browser=browser_; 
+0

如果我你告訴我我的browser_仍然是(空):/感謝您的幫助! :) – TomShreds 2010-03-23 14:05:58

1

它可能是由於你的方式是init荷蘭國際集團的觀點。如果視圖控制器正在代碼中加載,那麼您需要確保其視圖也被加載。

爲此init視圖控制器initWithNibName:bundle:,並確保其中包含視圖的NIB「文件所有者」設置爲視圖控制器的類名。

+0

嗡嗡聲我不確定我是否瞭解這一切,但無論如何,這就是我稱之爲這種觀點:(不是一個好主意,粘貼在這裏,看問題^^)謝謝 – TomShreds 2010-03-23 14:21:56

1

一種解釋是瀏覽器不被保留,因爲您不使用「self.attribute」構造來調用保留的合成設置器。瀏覽器正在加載筆尖,但是當你使用它時已經被釋放。

嘗試切換「瀏覽器」爲「self.browser」,看看是否可以解決問題。

+0

不幸的是,它並沒有改變事情:/謝謝各位 – TomShreds 2010-03-23 14:52:18

+0

嗯,你錯過了什麼。顯然,人們總是連接UIWebViews。如果項目很小,請在某個地方發佈,讓我們看看它。我懷疑你實際上並沒有在IB中正確連線。 – TechZen 2010-03-23 15:28:58

+0

@TechZen'self.browser'不應該改變任何東西; nib加載器在加載時調用'setBrowser:',所以它應該已經保留。另外,'self.browser'(在你描述的上下文中)是getter,它與保留無關。 – 2010-03-23 15:45:49

1

我以前有過這個問題。它看起來連接,但事情不起作用。我討厭這麼說,但你有沒有嘗試重新啓動Xcode? (我之前遇到過這個問題,好吧,重啓Xcode解決了這個問題。)

+0

我很高興看到這一點,我就像「呃,這麼簡單?!」。但不幸的是,它沒有奏效:/謝謝反正:) – TomShreds 2010-03-23 15:50:33