gpt4 book ai didi

iphone - RSS 阅读器不在 Web View 中显示选定的单元格

转载 作者:行者123 更新时间:2023-11-29 13:37:43 27 4
gpt4 key购买 nike

我一直在尝试根据 this tutorial 制作一个简单的 RSS 阅读器应用程序.

由于我使用的是 Xcode 4.3.2,因此必须对教程进行一些调整。一切正常,它可以很好地加载所有 RSS 提要,但是当我单击文章查看它时,详细 View Controller 加载但它完全空白。我试过在 Storyboard上的 DetailViewController 添加标签或按钮,但即使这些在加载时也不会出现。唯一可见的是顶部的导航栏。所以我的问题是我做错了什么?我确定这是一个简单的设置问题,而不是代码问题。事实上我可以将任何对象添加到 View 并且没有显示它几乎就像正在加载一个完全不同的 View Controller 。任何帮助将不胜感激。这是我一直在使用的代码:

- (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,它是否与 Storyboard 有关,而不是与单个 nib 文件有关?

确定_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 中设置

我已经在 Storyboard中设置了一个推送转场。

我现在已经用下面建议的方法替换了 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;
}

不幸的是,即使这看起来工作正常,我仍然得到一个空白 View 。

最佳答案

这里有多个问题。

  1. 在尝试将 _webViewController 推送到导航 Controller 之前,我没有看到您将其设置为任何内容的地方。这就是您看到“应用程序试图在目标上推送一个零 View Controller ”错误的原因,并且可能与您看到空白 View 的原因有关。

  2. 您在问题中引用的两种方法是否都在同一个类中实现?据推测,didSelectRowAtIndexPath 在您的 TableView Controller 中(Ray Wenderlich 教程中的 RootViewController),而 viewDidLoad 在 Web View Controller 中?如果是这样,请在提问时包括此类信息。如果不是,那可能是您问题的一部分。

  3. 最重要的是,听起来您正在尝试调整教程以使用 Storyboard。从好的方面来说,这意味着您可以在 IB 中做很多您必须在代码中做的事情。不利的一面是,这使得程序在 View Controller 之间的“流动”有很大不同,因此解释教程有点困难。

使用 Storyboard的主要区别是 Storyboard负责创建和推送/呈现您的 View Controller 。 (无论如何,让 Root View Controller 保留并重用 Web View Controller 的实例是反模式的。)以下是您在 Storyboard世界中的操作方式:

  1. 假设您的 Storyboard已经包含嵌入在导航 Controller 中的根 TableView Controller ,通过将 UIViewController 拖出库并设置其类标识,将您的 Web View Controller 放在 Storyboard上到您的 WebViewController

  2. 按住 Control 从表格 View 中的原型(prototype)单元格拖动到 Web View Controller ,并使其成为推送转场:

    drag to create segue

  3. 通过上面的代码,您可以运行您的应用程序并从 TableView 转到 WebView (无需代码——耶!),但 WebView 不知道要加载什么 URL。因此,您需要将以下内容放入 TableView Controller 中:

    - (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;
    }
  4. 然后您需要 Web View Controller 在其 Web View 中加载 URL——您已经拥有的 viewDidLoad 实现应该适合于此。

关于iphone - RSS 阅读器不在 Web View 中显示选定的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10071372/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com