【问题标题】:Defined outlets, connected them, they all returns (null)定义的出口,连接它们,它们都返回(空)
【发布时间】:2010-03-23 13:37:18
【问题描述】:

我正在尝试使用 WebView。

我做了一个出口:

IBOutlet UIWebView *browser;

将其定义为属性:

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

合成它:

@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];

【问题讨论】:

  • 您看到的究竟是什么?网页视图根本不会出现吗?它是否出现但不加载html?它失败的方式会告诉我们问题出在哪里。
  • @TechZen:我看到了 webview,完全没有错误。一切都很好,唯一的问题是我的连接不起作用。浏览器对象存在但为 (null)... :/ 谢谢!
  • 如果浏览器显示但属性为空,那么无论出于何种原因,它都没有在 IB 中链接。那是唯一会导致这种行为模式的事情。 (实际上将属性设置为空。)

标签: iphone objective-c cocoa-touch interface-builder uiwebview


【解决方案1】:

一些想法:

根据您运行此代码的方法,可能尚未连接出口。在调用super 的实现之后,最常见的开始与您的插座交互的地方是viewDidLoadviewWillAppear:viewDidAppear: 方法。如果您尝试在您的init 方法中执行此操作,您的网点可能仍然是nil。在有人请求您的视图控制器的view 之前,不会加载笔尖并且不会连接插座。这可能是你正在经历的吗?

如果您NSLog(@"%@", browser); 使用了您知道视图应该存在的方法,但记录了(null),那么这表明您的网点以某种方式失去了联系。

EDIT #1当您调用initWithNibName:bundle: 时,您确定您的xib 名称拼写正确吗? (顺便说一句,您可以为捆绑包传入nil,它将假定为[NSBundle mainBundle]

【讨论】:

  • @Dave DeLong:我的样本目前位于:- (void)viewDidLoad {},所以这应该不是问题。但是,如果我 NSLog 我目前得到的浏览器对象:(null)这真的很奇怪......感谢您的帮助
【解决方案2】:

有一件事是您可能已将其连接到@property 或连接到 IBOutlet(根据我的经验,Interface Builder 很容易混淆)。也许尝试声明为:

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

【讨论】:

  • 如果我按照你说的做,我的 browser_ 仍然是(null):/ 无论如何感谢您的帮助! :)
【解决方案3】:

一种解释是浏览器没有被保留,因为您没有使用“self.attribute”构造来调用执行保留的合成设置器。浏览器正在 nib 中加载,但当您开始使用它时,它已被释放。

尝试将“浏览器”切换为“self.browser”,看看是否能解决问题。

【讨论】:

  • 不幸的是,这并没有改变任何事情:/ 无论如何谢谢
  • 好吧,你错过了一些东西。显然,人们一直在挂接 UIWebViews。如果项目很小,请在某处在线发布,让我们查看一下。我怀疑你实际上并没有在 IB 中正确连接它。
  • @TechZen self.browser 不应该改变任何东西; nib 加载器在加载时调用setBrowser:,所以它应该已经被保留了。此外,self.browser(在您描述的上下文中)是 getter,与保留无关。
  • @Dave Delong -- 你可能是对的,但是,我已经看到了足够多的案例,其中 self-dot 解决了始终建议使用它始终是谨慎的问题。
  • @TechZen 很有趣。我很想看一个例子! :)
【解决方案4】:

这可能是由于您init查看视图的方式。如果视图控制器正在代码中加载,那么您需要确保它的视图也正在加载。

为此,init 使用 initWithNibName:bundle: 视图控制器并确保包含视图的 NIB 中的“文件所有者”设置为视图控制器的类名。

【讨论】:

  • 嗯,我不确定我是否理解这一切,但无论如何我就是这样称呼这个观点的:(在这里粘贴不是一个好主意,看问题^^)谢谢
【解决方案5】:

我以前遇到过这个问题。它看起来连接,但事情就是不工作。我不想这么说,但是您尝试过重新启动 Xcode 吗? (我之前也遇到过这个问题,不过重启 Xcode 解决了这个问题。)

【讨论】:

  • 我很高兴看到这个,我就像“嗯,这么简单的事情?!”。但不幸的是,它没有用:/ 无论如何谢谢 :)
猜你喜欢
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2017-05-18
  • 2020-07-19
相关资源
最近更新 更多