1

我有一个从 Xcode 4.5 的样板 Master-Detail 应用程序创建的应用程序,它打开了 CoreData、StoryBoards 和 ARC,它没有调用 prepareForSegue。CoreData 目前没有被使用,但它将用于缓存 XML 响应。performSegueWithIdentifier 有效,但 prepareForSegue 无效,我在将数据从 MasterViewController 传递/访问到 performSegueWithIdentifier 创建的 detailViewController 时遇到了麻烦。

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

简而言之:

  1. 我创建了一个标准的 splitView 排列
  2. MasterViewController 构建主表
  3. 每个单元格对应一个返回 XML 数据的 URL,该数据确定 detailView 中的内容
  4. 使用 NSXMLParser 操作/类解析获取的 XML
  5. 获取的 XML 确定需要哪个详细视图,并且 MasterViewController 调用适当的“替换”segue(通过 performSegueWithIdentifier)来启动相应的 detailViewController 以显示获取的 XML

我遇到的问题是没有调用 prepareForSegue,因此我无法将获取的 XML 传递给 detailViewController。

我需要的是以下之一:

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

我试过的:

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

问题可能是我在打电话:

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

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

TIA

射线

4

1 回答 1

2

好吧,这归结为盯着代码太久和/或新手。

在对我认为很明显的所有内容进行了三次检查之后,我认为唯一剩下的就是 segue 代码在 NSXMLParser 回调中的行为不正确,所以我切换了 handleLoadedResponse:notif 例程来存储解析的数据并发送-出通知。

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

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

射线

于 2013-01-03T11:24:34.827 回答