将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]];
好。 假设你有两个FirstViewController
和SecondViewController
。 在FirstViewController
你有一个tableview,当然tableviewcell。 在SecondViewController
你需要显示数据。 因此,在SecondViewController.h
您需要设置一些variables的@property (strong, nonatomic) id secDetailItem;
,在这种情况下,它是id
types@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];
如果你不需要,你可以删除它。