iOS - pushViewController 推送到 nil 视图控制器

Posted

技术标签:

【中文标题】iOS - pushViewController 推送到 nil 视图控制器【英文标题】:iOS - pushViewController pushes to a nil view controller 【发布时间】:2013-12-30 19:04:25 【问题描述】:

我试图在选择导致另一个 viewController 时创建一个 UITableViewCell,同时将数据传输到它。然而,它最终只是推送到一个 nil 视图控制器

在 Main.storyboard 中,我创建了视图控制器并为它指定了“DetailedTweetViewController”类

http://postimg.org/image/hf7wg0ilp/ - 显示类和标识符的图像

http://postimg.org/image/f0w0ezjzv/ - 图片显示没有转场

一切似乎都很好,这是我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    NSDictionary *currentTweet = _userPosts[indexPath.row];

    DetailedTweetViewController *tweetDetailedViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailedTweetStoryboard"];

    tweetDetailedViewController.statusID = currentTweet[@"id"];

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



我不知道为什么它不起作用...

这是错误图片:http://postimg.org/image/cjb595s8j/

更新

我尝试直接推送到视图控制器而不传递数据:

DetailedTweetViewController *detailedViewController = [[DetailedTweetViewController alloc]init];

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

但我没有收到任何错误,只是一个空白屏幕:http://postimg.org/image/7i02wst9v/

更新

在另一个名为 viewController 的 viewController 中初始化具有 didSelectRowAtIndexPath 的当前视图控制器

这是代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    FeedViewController *feedViewController = [[FeedViewController alloc]init];

    feedViewController.currentUserAccount = [_twitterAccounts objectAtIndex:indexPath.row];

    feedViewController.navigationItem.hidesBackButton = YES;

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


【问题讨论】:

您可以记录self.storyboardtweetDetailedViewController 以检查它们的空值吗? 它是(null) 但为什么... self.storyboardtweetDetailedViewController 是哪一个 好的,你是如何初始化当前视图控制器的?有didSelectRowAtIndexPath 方法的那个? ...代码? @HaniIbrahim 我更新了问题... 【参考方案1】:

获取这样的故事板而不是 self.storyboard

 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];// Find name of storyboard in your project plist

 DetailedTweetViewController *tweetDetailedViewController = [storyboard  instantiateViewControllerWithIdentifier:@"DetailedTweetStoryboard"];

【讨论】:

用你的故事板名称替换“MainStoryboard”。 并确保控制器故事板 ID 为“DetailedTweetStoryboard” 谢谢,但我仍然不明白如何才能(alloc 和 init)到达当前视图控制器,但要从这个视图控制器转到另一个视图控制器,我必须这样做。 ..【参考方案2】:

您还需要从情节提要中初始化“feedViewController”

您不能使用 self.storyboard 来初始化 viewController,除非您调用 self.storyboard 的视图也已经从情节提要中初始化。

例如 初始化 detailTweetViewController 从 feedViewController 通过 storyboard ... 那么 feedViewController 也必须已经从 storyboard 初始化了

【讨论】:

但是由于我没有使用故事板来初始化 feedviewcontroller,我不应该像第一次更新那样在没有故事板的情况下初始化另一个视图控制器吗? 您可以通过两种方式初始化视图控制器...(alloc 和 init)或通过(storyBoard)...(alloc 和 init)不会使用故事板中的视图控制器如果找到它,将使用 nib 文件,这就是为什么你会出现黑屏......为了通过 self.storyboard 使用情节提要,您还必须通过情节提要加载所有以前的视图 或者你可以简单地尝试一下 wuii 说的...分配一个新的故事板来初始化你的视图控制器 谢谢!但我想知道为什么它可以从前一个视图控制器推送到当前视图控制器,但我不能使用 alloc 和 init 以相同的方式从这个视图控制器推送到另一个视图控制器 你确定 feedViewController 是从故事板加载的吗?可能有一个 nib 文件被使用?因为我很确定 feedViewController 没有从情节提要中加载

以上是关于iOS - pushViewController 推送到 nil 视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

iOS - pushViewController 没有滑动背景图片

iOS 7 中的 PushViewController

在 pushViewController (iOS 11) 之后 NavigationBar 高度未更新

iOS - pushViewController 推送到 nil 视图控制器

pushViewController无法使用IOS11 SDK

使用 pushViewController 加载 TableViewController 后没有发生 Ios-Segue 到 UIViewController