2014-04-15 46 views
-2

我已按照教程Passing Data between View Controllers部分传递数据转发。我的代码是:将整数传递给DetailViewController

MasterViewController.h:

-(void)pushViewController: (UIViewController *)detailVC animated:(BOOL)animated; 

MasterViewController.m:

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

    UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath]; 
    NSInteger num = indexPath.row; 

    DetailViewController *detailVC = [[DetailViewController alloc] initWithNumber:indexPath.row]; 
    detailVC.number = num; 

    [self pushViewController:detailVC animated:YES]; 

} 

我想整数NUM传递给我的DetailViewController。但是我得到了线程1:SIGABRT。发生什么事?

+1

见http://raywenderlich.com/ 10209/my-app-crashed-now-what-part-1 – rmaddy

+0

添加断点并检查... –

+0

向您的帖子中添加'pushViewController:animated:'方法代码。 –

回答

0

我最好的猜测(没有看到你的@interface的DetailViewController)是它只是一个detailVC实例离开后,你把它放在屏幕上。

简单的解决方案:用一个实例变量代替:

@interface WhateverClassYouAreIn 
@property (nonatomic, strong) DetailViewController *detailVC 
@end 

// ... 
self.detailVC = [[DetailViewController alloc] initWithNumber:indexPath.row]; 

发生这种情况的原因是,如果没有实例变量,所述detailVC的存储持续时间是在其中它被声明的方法的范围。一般来说,任何在屏幕上显示的VC都应该被别的东西“强力”保留,一直回到根vc。

-1

在DetailViewController.h中定义了“initWithNumber”方法吗?

@interface DetailViewController : UIViewController 
- (instancetype)initWithNumber:(NSInteger)number; 
@end 
1

MasterViewController不从UINavigationController继承。

如果没有导航堆栈,则无法推入导航堆栈。

您可以添加一个,或者呈现新的VC,具体取决于您的GUI设计的目标是什么。

P.S. 什么是点设置数量的两倍,你是:

NSInteger num = indexPath.row; 
    DetailViewController *detailVC = [[DetailViewController alloc] initWithNumber:indexPath.row]; 
    detailVC.number = num; 

你要么使用init设置或直接设置它,你正在做的这两种方法

+0

如果我尝试[自我presentViewController:detailVC动画:是完成:无];并点击表格中的一个单元格,显示右侧页面,但不再有后退按钮。你能告诉我会发生什么吗? – user1189952

+0

因为后退按钮由导航控制器管理(作为导航栏的一部分)。如果你实际上已经有一个导航控制器在你的应用程序的某个地方(也许MasterViewController本身被压入导航堆栈或嵌入到一个,那么你可以得到一个处理它,然后做推,如果你想要后退按钮) – Gruntcakes

+0

I不明白这一点。我必须做什么? – user1189952