视图控制器在创建segue时出错

时间:2014-03-04 12:13:03

标签: ios objective-c uiviewcontroller storyboard segue

我有一个导航控制器和第一个VC模态到第二个罚款。我按了ctrl+button并拖了它,一切正常。

我正在从第一个VC(再次)做第二个segue,这次是另一个按钮,我是ctrl+button并将它拖到新的VC中,我在XCODE中得到一个USELESS错误 -

  

2014-03-04 11:57:21.340 OutTonight [3173:60b] - [SettingsViewController   setDealdetail:]:无法识别的选择器发送到实例0x16e686d0   2014-03-04 11:57:21.342 OutTonight [3173:60b] *终止app到期   未捕获的异常'NSInvalidArgumentException',原因:   ' - [SettingsViewController setDealdetail:]:发送无法识别的选择器   例如0x16e686d0'   * 首先抛出调用堆栈:

这是我的prepareforseguecode

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
      NSIndexPath *indexPath = [self.tableview indexPathForSelectedRow];
      DealViewController *detailView  = (DealViewController *)segue.destinationViewController;
      detailView.dealdetail = [self.allcontent objectAtIndex:indexPath.row];
      detailView.dealpostcode = [self.allpostode objectAtIndex:indexPath.row];
      detailView.dealvenuename = [self.allname objectAtIndex:indexPath.row];
      detailView.dealaddress = [self.alladdress objectAtIndex:indexPath.row];
      detailView.dealaddress2 = [self.alladdress2 objectAtIndex:indexPath.row];
      detailView.deallat = [self.alllat objectAtIndex:indexPath.row];
      detailView.deallng = [self.alllong objectAtIndex:indexPath.row];
      detailView.userlatitude = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserLatitude"];
      detailView.userlongitude = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserLongitude"];
}

有什么想法吗? enter image description here

1 个答案:

答案 0 :(得分:1)

我假设您已经在-prepareForSegue:为原始segue做了一些事情?在这种情况下,您需要确保检查-prepareForSegue:中的哪个segue,并为每个segu做正确的事情。

编辑:

要扩展我的答案,我猜您使用segue.destinationViewController,并在其上调用setDealdetail:。这可能适用于您的初始segue,因为destinationViewController响应了该消息,但是新segue的目标没有响应。您需要检查正在执行哪个segue。使用[segue.identifier isEqualToString:MySegueIdentifierString];

编辑2(发布代码后):

好的,你需要检查-prepareForSegue:中正在执行哪个segue。像这样:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:SegueToDealViewControllerIdentifier]) {
        NSIndexPath *indexPath = [self.tableview indexPathForSelectedRow];
        DealViewController *detailView  = (DealViewController *)segue.destinationViewController;
        detailView.dealdetail = [self.allcontent objectAtIndex:indexPath.row];
        detailView.dealpostcode = [self.allpostode objectAtIndex:indexPath.row];
        detailView.dealvenuename = [self.allname objectAtIndex:indexPath.row];
        detailView.dealaddress = [self.alladdress objectAtIndex:indexPath.row];
        detailView.dealaddress2 = [self.alladdress2 objectAtIndex:indexPath.row];
        detailView.deallat = [self.alllat objectAtIndex:indexPath.row];
        detailView.deallng = [self.alllong objectAtIndex:indexPath.row];
        detailView.userlatitude = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserLatitude"];
        detailView.userlongitude = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserLongitude"];
    }
}

其中SegueToDealViewControllerIdentifier是原始segue的segue标识符。