RSS 阅读器未在 WebView 中显示选定的单元格
Posted
技术标签:
【中文标题】RSS 阅读器未在 WebView 中显示选定的单元格【英文标题】:RSS Reader not displaying selected Cell in WebView 【发布时间】:2012-04-09 09:33:30 【问题描述】:我一直在尝试按照this tutorial 制作一个简单的 RSS 阅读器应用程序。
由于我使用的是 Xcode 4.3.2,因此必须对本教程进行一些调整。一切正常,它可以很好地加载所有 RSS 提要,但是当我单击一篇文章查看它时,会加载详细视图控制器,但它完全是空白的。我尝试向情节提要上的 DetailViewController 添加标签或按钮,但即使在加载时也不会出现。唯一可见的是顶部的导航栏。所以我的问题是我做错了什么?我确定这是一个简单的设置问题,而不是代码问题。事实上我可以将任何对象添加到视图中并且没有显示它几乎就像正在加载一个完全不同的视图控制器。任何帮助将不胜感激。这是我一直在使用的代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
_webViewController.entry = entry;
[self.navigationController pushViewController:_webViewController animated:YES];
- (void)viewDidLoad
NSURL *url = [NSURL URLWithString:_entry.articleUrl];
[self.webView loadRequest:[NSURLRequest requestWithURL:url]];
NSLog(@"The URL is %@",url);
因为这段代码是从旧版本的 Xcode 改编而来的,它是否与故事板而不是单个 nib 文件有关?
Ok _webviewController 在 RootViewController.h 中设置
@interface RootViewController : UITableViewController <UITableViewDelegate>
NSOperationQueue *_queue;
NSArray *_feeds;
NSMutableArray *_allEntries;
DetailViewController *_webViewController;
@property (retain) NSOperationQueue *queue;
@property (retain) NSArray *feeds;
@property (retain) NSMutableArray *allEntries;
@property (retain) DetailViewController *webViewController;
didselectRowAtIndex 在 RootViewController 中设置 & viewDidload 在 DetailViewController 中设置
我已经在故事板中设置了一个 push segue。
我现在已经用下面建议的方法替换了 tableView didSelectRowAtPath 方法
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
// test segue.identifier if needed
DetailViewController *viewController = segue.destinationViewController;
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
// set properties of viewController based on selection indexPath
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
viewController.entry = entry;
不幸的是,即使这似乎工作正常,我仍然得到一个空白视图。
【问题讨论】:
这里是另一个 RSS 提要的参考链接bit.ly/HrlAGV 这里有很多可能性 Neil,你有没有实现 Web 视图委托方法来检查错误?用 NSLOg 检查数据是否在 webviewcontroller 中正确移动?首先检查静态标签。 感谢您的帮助,我使用了 NSLog 并得到以下信息: URL 为 (null) 应用程序试图在目标这里有多个问题。
在您尝试将 _webViewController
设置为任何内容之前,我没有看到您将其设置到导航控制器上的位置。这就是您看到“应用程序试图在目标上推送 nil 视图控制器”错误的原因,并且可能与您看到空白视图的原因有关。
您在问题中引用的两种方法是否都在同一个类中实现?大概,didSelectRowAtIndexPath
在你的表视图控制器中(Ray Wenderlich 教程中的 RootViewController),而viewDidLoad
在 Web 视图控制器中?如果是这样,请在提问时提供此类信息。如果不是,那可能是您的问题的一部分。
最重要的是,听起来您正在尝试调整教程以使用情节提要。从好的方面来说,这意味着你可以在 IB 中做很多你必须在代码中做的事情。不利的一面是,这使得视图控制器之间的程序“流动”有很大不同,因此解释教程有点困难。
使用情节提要的主要区别在于情节提要负责创建和推送/呈现您的视图控制器。 (让根视图控制器保留并重用 Web 视图控制器的实例无论如何都是反模式。)以下是您在情节提要世界中做事的方式:
假设您的故事板已经包含嵌入在导航控制器中的根表视图控制器,通过将 UIViewController
拖出库并将其类标识设置为您的 WebViewController
将您的 Web 视图控制器放在故事板上.
从表格视图中的原型单元格按住 Control 并拖动到 Web 视图控制器,并使其成为 Push segue:
通过上述方式,您可以运行您的应用程序并从表格视图转到网络视图(无需代码——耶!),但网络视图不知道要加载哪个 URL。因此,您需要在表格视图控制器中添加以下内容:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
// test segue.identifier if needed
WebViewController *viewController = segue.destinationViewController;
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
// set properties of viewController based on selection indexPath
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
viewController.entry = entry;
然后您将需要 Web 视图控制器在其 Web 视图中加载 URL ——您已经拥有的 viewDidLoad
实现应该适合此。
【讨论】:
感谢您的帮助 rickster,我已根据您的回复修改了我的问题。不幸的是,我仍然得到一个空白视图。 当空白视图出现时,您是否正在获取“URL 是”日志?如果不是,我猜 a) 包含它的viewDidLoad
是在错误的视图控制器上实现的,b) 空白视图实际上不是 WebViewController 的实例(或 DetailViewController 或任何你调用的类管理您的网络视图)。如果您看到该日志,则视图控制器正在获取 URL,但是将其传递给 Web 视图时出现问题。 self.WebView
当时指的是什么?
是的,当出现空白视图时,我收到“URL 为 (null)”消息。抱歉我是个菜鸟,但你当时的“self.webView”是什么意思?
1:获取“The URL is”日志意味着您的(详细)视图控制器正在设置中,但它是 (null)
意味着传递 URL 有问题。尝试记录 @987654332 @。如果它也为零,我猜你发现我的指令有问题,或者你的entry
属性不是strong
(或retain
)。
2:听起来self.webView
应该是UIWebView
实例的引用(可能通过IBOutlet 连接)。我们从您的“URL 为 (null)”日志中知道问题是在将 URL 传递给 Web 视图之前出现的——否则我建议确保当您到达 self.webView loadRequest...
时 self.webView 不为零行(您可以使用另一个 NSLog 或调试器断点检查)。以上是关于RSS 阅读器未在 WebView 中显示选定的单元格的主要内容,如果未能解决你的问题,请参考以下文章
RSS 提要未在我的 Wordpress 提要中的 Mailchimp 时事通讯中显示图像
如何在 Android WebView 中播放 YouTube 视频?