2015-05-04 151 views
-3

我试图通过赛格瑞虽然navigationController在IndexPath通过,但它崩溃在线:为什么我prepareForSegue崩溃

view.selectedAccount = self.selectedAccountRow; 

感谢

-(IBAction)changeButtonPressed:(id)sender { 

CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.accountTableView]; 
NSIndexPath *indexPath = [self.accountTableView indexPathForRowAtPoint:buttonPosition] 
self.indexPath = indexPath; 
NSLog(@"%ld",(long)indexPath.row); 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    [super prepareForSegue:segue sender:sender]; 
    ViewController2 *view = [segue destinationViewController]; 
    view.selectedAccount = self.indexPath; 
} 

answer here:Set NSString Object, prepareForSegue through UINavigationController

+0

什么日志说?为什么它会崩溃?顺便说一句:我不认为你必须在prepareforsegue中调用super的实现! “ –

+0

”无法识别的选择器发送到实例“ –

+0

好的。听起来像你的ViewController2类没有一个名为selectedAccount的属性。 –

回答

-2

右键单击您在IB中的视图,然后移除存在黄色警告标志的实例。运行,一切都应该工作。

0

我看到许多错误:

self.selectedAccountRow永远不会被定义,改成这样:

-(IBAction)changeButtonPressed:(id)sender { 
    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.accountTableView]; 
    NSIndexPath *indexPath = [self.accountTableView indexPathForRowAtPoint:buttonPosition] 
    self.selectedAccountRow = indexPath; 
} 

当使用[Segue公司destinationViewController]你需要确保班级的assingning是正确的:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    ViewController2 *view = (ViewController2*)[segue destinationViewController]; 
    view.selectedAccount = self.selectedAccountRow; 
} 

没有必要声明强,因为它是默认的,但它的推荐,因为它更容易阅读,这是一个很好的鳕鱼练习。

@property (strong, nonatomic) NSIndexPath *selectedAccount; 

你需要更好的命名你的类和属性,如果声明一个viewController子类,名称应该是不言而喻的,也许你可以将其命名detailViewController而不是在viewController2

此外,你应该考虑使用你的班2-3个字母前缀,请在这里读好对象 - 做法: Objective-C Good practices

+0

我已经窃取了我的代码放在一起,我为一家公司工作,所以不能只是复制代码。但它仍然坠毁采用你的建议 –

+0

我有一个错误,我刚编辑我的答案,在第二代码片段,我改变了我的代码为'view.selectedAccount = self.selectedAccountRow;'如果不能解决您的错误可以请你给我们更多的细节?或者你得到的新错误。 – Fantini

+0

我已经做到了,仍然得到“无法识别的选择发送到实例” –