我已按照教程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。发生了什么事?
答案 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