2010-03-23 61 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