performSegueWithIdentifier替换detailViewController工作,但不调用prepareForSegue

时间:2013-01-01 23:39:20

标签: ios uisplitviewcontroller uistoryboardsegue

我有一个应用程序是从Xcode 4.5的样板主 - 细节应用程序创建的,其中CoreData,StoryBoards和ARC已启用,而不是调用prepareForSegue。目前没有使用CoreData,但它将缓存XML响应。 performSegueWithIdentifier可以正常工作,但是prepareForSegue没有,我遇到麻烦从MasterViewController传递/访问数据到performSegueWithIdentifier创建的detailViewController中。

我的基本设置类似于主题中讨论的内容:Storyboards and UISplitViewControllers。第三页上有一个故事板的图像,与我的设置非常相似(我没有足够的代表来发布图像)。

简而言之:

  1. 我创建了一个标准的splitView排列
  2. MasterViewController构建主表
  3. 每个单元格对应一个返回XML数据的URL,该数据确定detailView
  4. 中的内容
  5. 使用NSXMLParser操作/类
  6. 解析获取的XML
  7. 获取的XML确定需要哪个详细视图,MasterViewController调用相应的“替换”segue(通过performSegueWithIdentifier)启动相应的detailViewController以显示获取的XML
  8. 我遇到的问题是没有调用prepareForSegue,所以我无法将获取的XML传递给detailViewController。

    我需要的是以下之一:

    • prepareForSegue执行
    • 一种了解handleLoadedResponse里面的segue.destinationViewController的方法:notif
    • 从detailViewControllers的viewDidLoad方法内部访问MasterViewController中的“currentResponse”变量的方法
    • 通过StoryBoardID
    • 查找MasterViewController的方法

    我尝试了什么:

    • 在每个viewController的prepareForSegue中放置NSLog()语句 - 没有一个被称为
    • 挖掘detailViewController中的self.parentViewController链,找到调用performSegueWithIdentifier的MasterViewController - 我找不到我正在寻找的类变量
    • 阅读几乎所有我发现的“prepareForSegue not called”帖子 - 它们似乎都是由于我在代码/故事板中看不到的编码/故事板错误

    我的问题可能是问题:

    [self.navigationController performSegueWithIdentifier:@"theDesiredSegue" sender:self];
    

    来自handleLoadedResponse:notif回调,应用程序试图在我的解析对象中调用prepareForSegue?

    TIA

1 个答案:

答案 0 :(得分:2)

好吧,白痴盯着代码太长时间和/或新手。

在对我所知的一切进行三重检查后,我认为唯一剩下的就是segue代码在NSXMLParser回调中行为不正确,所以我切换了handleLoadedResponse:notif例程来存储解析后的数据和发送通知。

在调试这些更改时,我意识到我的segues附加到错误的对象上。它们实际上是附加到navigationController而不是我的viewController。在视觉上,事情看起来像RWForums: Storyboards and UISplitViewControllers第3页上的故事板,但事实并非如此。最终的结果是,即使看起来我的代码调用了performSegueWithIdentifier并且它应该调用了prepareForSegue方法,它实际上调用了navigationController的segue,因此正在调用navigationController的继承的prepareForSegue。

建议:确保在文档大纲打开的情况下重新重新检查StoryBoard编辑器中的所有连接。