0

由于我使用的是 tapku 日历,因此我想在按下日期时触发手动 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: 进行运行时访问的标识符。

你知道如何让它工作吗?

谢谢

4

3 回答 3

4

以下是如何在情节提要中连接 segue 并从代码中调用它:

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

    [self performSegueWithIdentifier:<#identifier#> sender:nil];

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

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

于 2013-02-15T07:08:37.837 回答
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. 开始一个新项目,然后选择模板“Single View Application”
  2. 转到项目的情节提要
  3. 打开实用程序菜单(右)。
  4. 从实用程序菜单底部的列表中拖出第二个视图控制器对象并将其拖到情节提要 - 现在您将拥有 2 个视图控制器(模板随附的一个 - 自动分配为入口点 - 和您添加的新的)
  5. 选择您在情节提要中添加的第二个视图控制器
  6. 转到实用程序菜单中的“身份检查器”
  7. 将第二个 VC 的类更改为您的类名。现在你有 2 个视图控制器
  8. 现在您已经在情节提要中创建了 2 个 VC。
  9. 现在您可以将上面的代码包含在第一个 VC 代码中。

希望这可以帮助

于 2013-02-15T03:22:24.167 回答
0

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

仅当您可以在情节提要中设置它们时,使用 segues 才能很好地工作,而且,AFAIK,如果没有它,它们几乎毫无用处。

顺便说一句:您收到的警告只是意味着您可能在 Storyboards 中设置的 VC 没有用于实例化的标识符。转到该 vc 的 StoryBoard 身份检查器并在“Storyboard ID”中输入任意名称将抑制它。

玩得开心

于 2013-02-15T10:26:55.137 回答