为什么会出现“在释放内存时尝试加载... :UISearchController:”的错误?(涉及IT技术)

5
我有一个根Storyboard,其中包含一个按钮,可以推出ViewControllerB。
ViewControllerB具有一个排序控制器UISortController
ViewControllerB具有由根导航控制器控制的“返回”方法。
我收到以下警告: Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UISearchController: 0x7ff10258ba60>) 我使用了苹果的示例(需要成员资格)来添加新的UISearchController。
有人遇到过这个问题吗? 我该如何解决?
2个回答

1

我不确定如何实现这个。返回功能实际上由主视图控制器导航控制器控制。我应该用自己的按钮简单地覆盖它吗? - ICL1901
所以,只是为了明确起见,您建议禁用UINavigationControllers的返回按钮,并将其替换为您自己的取消编织?我遇到了类似的问题,并检查了是否触发了两个向后导航。 - Matthew Knippen
如果您正在使用 UINavigationController,则不需要取消 unwind segue,因为导航控制器会为您处理此操作。我建议在 UINavigationController 的 pop 方法上设置符号断点,并检查是否有其他东西触发了向后导航。或者,暂时将 UINavigationController 的委托设置为监视其活动。 - Andrew Ebling
1
@AndrewEbling -- 你能否提供一个这样的例子:“或者,暂时将UINavigationControllers委托设置为监视其活动。”我该怎么做?谢谢。 - ICL1901
1
@DavidDelMonte 首先创建一个实现了 UINavigationControllerDelegate 协议方法并能够将一些消息记录到控制台的对象。然后创建该对象的一个实例,并将其分配给你的 UINavigationControllerdelegate 属性。每当触发转换时,你实现的代理方法都应该被调用。 - Andrew Ebling
显示剩余4条评论

1
我遇到了相同的控制台错误消息,但请注意我的Xcode项目的以下内容:
  • 由于它们与分割视图控制器(到详细视图控制器)的使用有关,导航控制器的转场必须保留;
  • (根据@AndrewEbling上面的评论)代码不需要解开转场,因为导航控制器自动管理(部分)任务;
  • 此外,由于块用于在父视图控制器中设置属性,因此代码不需要解开转场。
感谢Leehro和Clafou在this SO answer中的评论,通过在viewDidLoad中使用以下代码行(请注意,无需将其插入dealloc),可以抑制控制台错误消息:

[self.searchController loadViewIfNeeded];(从iOS 9开始可用)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接