将TableViewCell推送到另一个ViewController时出错

我试图将数据从TableViewCell传递到另一个ViewController.But没有数据显示在另一个ViewController.here是我的代码

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ PeripheralManager *objSelected=[device objectAtIndex:indexPath.row]; [self prepareForSegue:@"TableDetails" sender:objSelectedDevice]; } -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"TableDetails"]) { DetailViewController *detail=segue.destinationViewController; detail.dataArray=device; } } 

错误信息

 nested push animation can result in corrupted navigation bar 2012-10-24 12:01:39.805 [3182:707] nested push animation can result in corrupted navigation bar 2012-10-24 12:01:40.164 [3182:707] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 2012-10-24 12:01:40.167 [3182:707] Finishing up a get navigation transition in an unexpected state. Navigation Bar subview tree might corrupted. 

删除你的额外代码只有这样做 –

DetailViewController.h

 @property(nonatomic, retain)NSMutableArray *dataArray; 

DetailViewController.m

 @synthesize dataArray = _dataArray; 

现在在TableViewController.m只是写这个 –

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if([segue.identifier isEqualToString:@"TableDetails"]) { DetailViewController *detailViewObject = segue.destinationViewController; detailViewObject.dataArray = anyArray; } } 

在这里,我传递NSMutableArray

你不需要这个:

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

这就是Segue会自动执行的

此外,你有3行将加载视图控制器 – 请参阅下面的评论:

 NSInteger row=[indexPath row]; NSString *value=[device objectAtIndex:row]; MeBleDetailViewController *mdc=[self.storyboard instantiateViewControllerWithIdentifier:@"MeBleDetailViewController"]; mdc.deviceName=value; [self presentModalViewController:mdc animated:YES]; // Load ViewController [UIView commitAnimations]; [self performSegueWithIdentifier:@"TableDetails" sender:[device objectAtIndex:indexPath.row]]; // Load ViewController [self.navigationController pushViewController:mdc animated:YES]; // Load ViewController 

这就是为什么你得到这个错误: 嵌套推animation可能导致导航栏损坏

另外,如果你已经将表格单元格中的segueconfiguration到另一个视图控制器,那么在didSelectRowAtIndexPath方法中不需要任何东西。


编辑:

无论您想要推送的视图控制器的数据 – 把它放在prepareforSegue方法,而不是didSelectRowAtIndexPath

如果你从表格单元格创build一个segue来查看控制器,那么你不需要执行下面的代码,因为这个方法是以编程方式执行segue。

[self performSegueWithIdentifier:@"TableDetails" sender:[device objectAtIndex:indexPath.row]];

好。 假设你有两个FirstViewControllerSecondViewController 。 在FirstViewController你有一个tableview,当然tableviewcell。 在SecondViewController你需要显示数据。 因此,在SecondViewController.h您需要设置一些variables的@property (strong, nonatomic) id secDetailItem; ,在这种情况下,它是idtypes@property (strong, nonatomic) id secDetailItem; 。 在SecondViewController.m合成它并添加一个像这样的setter方法

 -(void)setDetdetailItem:(id)newSecdetailItem{ if (secDetailItem != newSecdetailItem) { secDetailItem = newSecdetailItem; // Update the view. [self configureView];//This method is needed to update view if there are some changes in that view. } } 

那么在FirstViewController.h导入SecondViewController.h并添加属性SecondViewController.h @property (strong, nonatomic) SecondViewController *secondViewController; 然后合成。 在这个委托方法的FirstViewController.m文件中执行以下操作:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ self.secondViewController.secDetailItem=//set your data should be passed. 

//此外,如果您需要推pushviewcontroller:SecondViewController添加pushviewcontroller:SecondViewController ,或使用IB连接tableview单元格和SecondViewController一起push方法。 }

在这种情况下,你将不需要使用执行segue。 Setter方法将尽快设置secDetailItem东西。

另外如果你需要在SecondViewController更新你的视图, SecondViewController在这个方法中添加这个方法。

 - (void)configureView 

{

 if (self.secDetailItem) { self.textLabel.text=self.secDetailItem;//Data passed from FirstViewController } 

}

这是你需要做的。 对不起,如果它很复杂。 问任何问题。

这可能与这一行有关:

 [UIView commitAnimations]; 

如果你不需要,你可以删除它。