performSegueWithIdentifier 替换 detailViewController 有效,但没有调用 prepareForSegue
Posted
技术标签:
【中文标题】performSegueWithIdentifier 替换 detailViewController 有效,但没有调用 prepareForSegue【英文标题】:performSegueWithIdentifier replacing detailViewController works, but prepareForSegue is not called 【发布时间】:2013-01-01 23:39:20 【问题描述】:我有一个从 Xcode 4.5 的样板主从应用程序创建的应用程序,其中 CoreData、StoryBoards 和 ARC 已打开,但未调用 prepareForSegue。 CoreData 目前没有被使用,但它将用于缓存 XML 响应。 performSegueWithIdentifier 有效,但 prepareForSegue 无效,我在将数据从 MasterViewController 传递/访问到 performSegueWithIdentifier 创建的 detailViewController 时遇到了麻烦。
我的基本设置类似于线程中讨论的内容:Storyboards and UISplitViewControllers。第三页上的故事板图片与我的设置非常相似(我没有足够的代表来发布图片)。
简而言之:
-
我创建了一个标准的 splitView 排列
MasterViewController 构建主表
每个单元格对应一个返回 XML 数据的 URL,该数据确定 detailView 中的内容
使用 NSXMLParser 操作/类解析获取的 XML
获取的 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
雷
【问题讨论】:
【参考方案1】:好吧,这归结为盯着代码太久和/或新手。
在三重检查了我认为很明显的所有内容之后,我认为唯一剩下的就是 segue 代码在 NSXMLParser 回调中的行为不正确,所以我切换了 handleLoadedResponse:notif 例程来存储解析的数据并发出通知。
在调试这些更改时,我意识到我的 segue 附加到了错误的对象上。它们实际上是附加到 navigationController 而不是我的 viewController。从视觉上看,事情看起来就像RWForums: Storyboards and UISplitViewControllers 第三页上的故事板,但实际上并非如此。最终结果是,即使我的代码似乎在调用 performSegueWithIdentifier 并且应该调用它的 prepareForSegue 方法,但它实际上是在调用 navigationController 的 segue,因此正在调用 navigationController 继承的 prepareForSegue。
建议:确保在打开文档大纲的情况下重新检查 StoryBoard Editor 中的所有连接。
雷
【讨论】:
以上是关于performSegueWithIdentifier 替换 detailViewController 有效,但没有调用 prepareForSegue的主要内容,如果未能解决你的问题,请参考以下文章
performSegueWithIdentifier 出现运行时错误,为啥?
iOS8 performSegueWithIdentifier 运行太慢
performSegueWithIdentifier:sender: 找不到我的转场
unwind segue / performSegueWithIdentifier: 问题
performSegueWithIdentifier 不起作用
performSegueWithIdentifier:从 didSelectRowAtIIndexPath 调用的方法缓慢显示视图