麻烦解雇赛格

时间:2013-02-15 02:45:33

标签: ios xcode storyboard uistoryboard uistoryboardsegue

由于我正在使用tapku日历,因此我想在按下日期时触发手动segue。所以我实例化了我想要的视图控制器,segue,然后执行segue。

DisplayScheduleViewController *vc = [[DisplayScheduleViewController alloc] init];

mySegue = [[UIStoryboardSegue alloc] initWithIdentifier:@"Day G" source:self destination:vc];

[self performSegueWithIdentifier:@"Day G" sender:self];

}

但是,一旦按下日期,程序就会崩溃,这是异常消息:

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'Receiver()没有带标识符'Day G'的segue'

在运行程序之前,我在故事板中收到此警告消息:

由于缺少入口点而无法访问场景,并且没有通过-instantiateViewControllerWithIdentifier的运行时访问标识符:。

你知道怎么做吗?

由于

3 个答案:

答案 0 :(得分:4)

以下是如何在故事板中连接segue并从代码中调用它:

  1. 在情节提要中创建两个视图控制器。
  2. 控制从源场景中的视图控制器图标拖动到目标场景。
  3. 选择合适的segue类型。
  4. 在检查器中,为segue指定一个标识符。
  5. 在运行时,从源视图控制器调用

    [self performSegueWithIdentifier:<#identifier#>发件人:无];

  6. 覆盖 - 源视图控制器中的[UIViewController prepareForSegue:sender:],以在源和目标控制器之间传递状态。

  7. 顺便说一句, - [UIStoryboardSegue initWithIdentifier:source:destination:]方法可供您在创建将从故事板实例化的自定义segues子类时覆盖。直接创建故事板segue实例不适用。

答案 1 :(得分:0)

此警告:

Scene is unreachable due to lack of entry points and does not have an identifier for runtime access via -instantiateViewControllerWithIdentifier:.

表示您没有启动VC。我猜这也导致了segue问题。看起来你正在实例化一个VC并从上面的代码中激活一个segue,但你实际上是在上面代码中的VC中吗?

我建议您直接在故事板中添加ViewController(以图形方式)并只更改其类 - 这是一个标准流程,但您可以根据您在项目中的位置开始

  1. 启动一个新项目,然后选择“单一视图应用程序”模板
  2. 转到项目的故事板
  3. 打开实用程序菜单(右)。
  4. 从实用程序菜单底部的列表中拖动第二个View控制器对象并将其拖到故事板 - 现在您将拥有2个View控制器(模板附带的控制器 - 自动指定为入口点) - 以及您添加的新内容)
  5. 选择您在故事板中添加的第二个视图控制器
  6. 转到实用程序菜单中的“身份检查器”
  7. 将第二个VC的类更改为您的类名。现在你有2个视图控制器
  8. 现在您已在故事板中创建了2个VC。
  9. 现在,您可以在第一个VC代码中包含上面的代码。
  10. 希望这有帮助

答案 2 :(得分:0)

如果你不能在StoryBoards中设置一个segue,你最好的机会可能是设置一个新的xib(在Storybards之外),在该xib中设计你的ViewController,然后通过UIViewController实例化那个vc initWithNibName: bundle: 然后,您可以使用presentViewController: animated: completion:展示您的vc。 如果您不确定如何使用这些方法,请查看UIViewController的文档,但我发现它们非常不言自明。

如果你可以在故事板中设置它们,那么只使用segues很有效,而AFAIK,如果没有它,它们几乎没用。

顺便说一下:你得到的警告只是意味着你在故事板中可能设置的VC没有标识符来实例化它。转到该vc的StoryBoard身份检查员并在“故事板ID”中输入任意名称将取消该功能。

玩得开心