将整数传递给DetailViewController

时间:2014-04-15 19:01:08

标签: ios objective-c sigabrt

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

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。发生了什么事?

3 个答案:

答案 0 :(得分:1)

MasterViewController不会从UINavigationController继承。

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

您可以添加一个或显示新的VC,具体取决于GUI的设计目的。

P.S。 在设置数字两次的重点是:

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

您可以使用init设置它或直接设置它,您可以双向完成

答案 1 :(得分:0)

我最好的猜测(没有看到你的DetailViewController的@interface),只是在你将它放在屏幕上后,detailVC实例就会消失。

简单解决方案:改为使用实例变量:

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

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

发生这种情况的原因是,如果没有实例变量,detailVC的存储持续时间就是声明它的方法的范围。一般来说,任何进入屏幕的VC都应该坚持“强烈”。通过别的东西,一直回到根vc。

答案 2 :(得分:-1)

DetailViewController.h中是否定义了“initWithNumber”方法?

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