【问题标题】:Trouble firing segue无法触发 segue
【发布时间】:2013-01-31 00:11:52
【问题描述】:

由于我使用的是 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 () has no segue with identifier 'Day G''

在运行程序之前,我在情节提要中收到此警告消息:

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

你知道如何让它工作吗?

谢谢

【问题讨论】:

  • 您是否已经在情节提要中将 segue 连接到 DisplayScheduleViewController?
  • 我无法连接 segue,因为我正在从 tapku 日历的单元格中进行 segu。这就是为什么我必须手动进行segue。你知道如何正确操作吗?
  • 你现在有故事板吗?如果有,是什么?
  • segues 的全部目的是使故事板中的视图控制器之间的转换变得容易。在这种情况下,您可能不想进行转场。因此,您需要做什么取决于您的控制器结构以及您希望如何进行转换。

标签: ios xcode storyboard uistoryboard uistoryboardsegue


【解决方案1】:

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

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

    [self performSegueWithIdentifier: sender:nil];

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

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

【讨论】:

    【解决方案2】:

    此警告:

    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 代码中。

    希望对你有帮助

    【讨论】:

    • 是的,我正在从 VC 触发我的代码。基本上我在第一个 VC 中实例化了第二个 VC。我已经完成了步骤 1-9 并在情节提要中创建了两个视图控制器。您还有其他想法吗?
    【解决方案3】:

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

    只有当你可以在故事板中设置它们时,使用 segues 才能很好地工作,而且,AFAIK,如果没有它,它们几乎毫无用处。

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

    玩得开心

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 2013-02-22
      • 2013-04-30
      • 2015-07-28
      相关资源
      最近更新 更多