为什么我prepareForSegue崩溃
我试图通过赛格瑞虽然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
右键单击您在IB中的视图,然后移除存在黄色警告标志的实例。运行,一切都应该工作。
我看到许多错误:
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
我已经窃取了我的代码放在一起,我为一家公司工作,所以不能只是复制代码。但它仍然坠毁采用你的建议 –
我有一个错误,我刚编辑我的答案,在第二代码片段,我改变了我的代码为'view.selectedAccount = self.selectedAccountRow;'如果不能解决您的错误可以请你给我们更多的细节?或者你得到的新错误。 – Fantini
我已经做到了,仍然得到“无法识别的选择发送到实例” –
什么日志说?为什么它会崩溃?顺便说一句:我不认为你必须在prepareforsegue中调用super的实现! “ –
”无法识别的选择器发送到实例“ –
好的。听起来像你的ViewController2类没有一个名为selectedAccount的属性。 –