【问题标题】:NSInvalidArgumentException - receiver has no segue with identifierNSInvalidArgumentException - 接收者没有标识符的segue
【发布时间】:2012-08-06 03:13:48
【问题描述】:

我已经尝试了好几个小时,但没有任何效果。我试图在两个视图控制器之间进行切换,从一个 tableViewController 到另一个 tableViewController。 segue 连接到顶层视图,而不是 tableviewcell。 Xcode 中设置的标识符与代码中使用的标识符相同(复制和粘贴)。昨晚运行良好,但现在我似乎无法让它在不崩溃的情况下继续运行。

这里是调用segue的方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    self.photoList = [FlickrFetcher photosInPlace:[self.topPlacesList objectAtIndex:indexPath.row] maxResults:50];
    NSLog(@"photolist %@", self.photoList);

    NSLog(@"here");

    [self performSegueWithIdentifier:@"segue1" sender:self];
    NSLog(@"here");
}


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"segue1"])
    {
        PhotosTableViewController *photosTVC = segue.destinationViewController;
        photosTVC.photoList = self.photoList;
    }
}

这是错误报告

2012-08-08 15:28:39.093 Top Places[512:f803] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“接收者(PlacesTableViewController:0x6887ff0)没有标识符为“segue1”的segue '' * 首先抛出调用栈: (0x13C0052 0x1551D0A 0xDE24B 0x3EFD 0xA771D 0x7952 0x92F86D 0x1394966 0x1394966 0x1394966 0x1394966 0x1394407 0x1394407 0x12f772407 0x12f77c0 0x12f6db4 0x12f6ccb 0x12a9879 0x12a993e 0x17a9b 0x11778 0x26d5) 终止称为抛出异常

here is a screenshot of the storyboard http://s14.postimage.org/66wf13q4h/Screen_Shot_2012_08_08_at_3_22_10_PM.png

【问题讨论】:

  • 嘿!我修好了它! 1. 确保在 Xcode 中选择了正确的故事板(如果您重命名故事板,请在项目摘要中更改它)。然后删除模拟器上的应用并重启
  • 删除应用程序是一个解决方案! Tnx!
  • 在某些情况下,单独删除是行不通的。您将需要再次清理和构建应用程序。
  • 另外:检查您是否本地化了情节提要或搞砸了。我有两个版本(一个在 en.lproj/ 中,另一个在 es.lproj/ 中),并且正在使用的版本 (en) 与我正在修改的版本 (es) 不同。我刚刚从项目中删除,删除了未使用的项目并添加了“好”的项目。
  • 哇,真是个错误!在更改 segue 的位置后,我也从模拟器中删除了该应用程序,它现在可以工作了。

标签: objective-c uiviewcontroller segue identifier uistoryboardsegue


【解决方案1】:

在 Interface Builder 中,您需要将 segue 标识符设置为 segue1,这是一个连接到您的视图控制器的 segue。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,并为此苦苦挣扎了好几个小时。 Stackmonster 的回答解决了我的问题(重命名情节提要),但我不明白为什么它解决了问题。

    我发现当我更改情节提要上的项目(添加标签或更改背景颜色)时,它并没有反映在模拟器中 - 我没有使用我可以在 xcode 中看到的情节提要,而是使用旧版本的故事板。 我不得不在项目导航器中重命名故事板,并在info.plist(在支持文件中)重命名它,我的标签出现了,背景颜色应用了,segue 起作用了。

    我不知道为什么故事板的更改没有生效,但这让我花了很多时间去寻找。我在博客上看到很多开发者都有同样的问题。

    【讨论】:

      【解决方案3】:

      我修好了! 1. 确保在 Xcode 中选择了正确的故事板(如果您重命名故事板,请在项目摘要中更改它)。然后删除模拟器上的应用并重启

      【讨论】:

        【解决方案4】:

        我可以通过在 Xcode 的“产品”菜单下运行“清理”并重置模拟器中的内容和设置来修复它。

        【讨论】:

        • 谢谢 - 这对我也有用。投赞成票。
        • 我什至不需要在模拟器上做任何事情;只是“干净”本身就为我解决了问题。
        • 我认为问题在于 xib 和故事板缓存在设备上,因此您必须重置所有这些内容。
        【解决方案5】:

        我尝试了列出的所有内容,但没有运气。有效的是为新视图创建一个新的转场,然后使用那个,运行它,然后创建一个转回旧视图的转场。

        【讨论】:

          【解决方案6】:

          我遇到了同样的问题。在我的初始化程序 - (id)initWithCoder:(NSCoder *)aDecoder 中,我正在做 self = [super init];,而我应该做 self = [super initWithCoder:aDecoder];。当我解决这个问题时,一切都按预期工作。

          【讨论】:

            【解决方案7】:

            在展开转场时遇到了这个问题。终于意识到,当我更换情节提要上的视图控制器时,我丢失了我的标识符。我通过单击文档大纲(情节提要的侧边栏)中的展开转场重新添加它,然后在属性检查器中为其添加标识符。

            如果没有其他方法,至少在放松转场方面,您可以致电

            [self dismissViewControllerAnimated:YES completion:nil];
            

            【讨论】:

              【解决方案8】:

              当我将新的 VC 作为另一个视图控制器的子类时,我遇到了同样的问题。它应该是 UIViewController 或 UITableViewController 的子类。检查头文件是否正在导入UIKIT。

              【讨论】:

                猜你喜欢
                • 2018-04-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多