我有一个标签栏 Controller ,其中一个标签包含一个表格 View 。单击一行时,我会转到一个新的子 Controller 。
在这个新 Controller 中,我有一个 deinit 删除观察者并打印“controller is de-initialised here”。
当我按下导航栏中的后退按钮时,我可以看到此操作调用了 de-init。
现在...我在那个子 Controller 中有另一种方法,它设置选项卡栏 Controller 的事件选项卡。发生此操作时,我没有看到表明在这种情况下未调用 de-init 的打印语句。
我想知道如何解决这个问题?我担心如果不调用 deinit,我会在内存中保留额外的东西。
更新: 在我设置事件选项卡的方法中,我还想在当前事件的子 Controller 上 popToRoot。我尝试了以下方法:
self.navigationController!.popViewControllerAnimated(true)
self.tabBarController?.selectedIndex = 2
我收到以下错误:
popViewControllerAnimated: called on <UINavigationController 0x15609a200> while an existing transition or presentation is occurring; the navigation stack will not be updated.
这是有道理的,但我想知道,有什么办法可以解决这个问题吗?
更新 2
为了避免上述问题,我将 popToRoot 放在我的观察者中,并将 tabbar.setSelectedIndex 添加到 viewDidDisappear。
func checkForSeg(){
//self.tabBarController?.selectedIndex = 2
self.navigationController!.popViewControllerAnimated(true)
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(true)
print("view Did Disappear called?")
self.tabBarController?.selectedIndex = 2
}
但我不明白为什么当我按下导航后退栏按钮时标签栏没有切换索引(我不想要它,但我不明白为什么?)
当我在 checkForSeg 函数中显式调用 popToRoot 时,viewDidDisappear 会执行“tabbar.setSelectedIndex”行(根据需要),但是当我按下导航后退栏按钮时它不会(也需要)。我不明白这是为什么?因为我没有针对何时应该或不应该执行选项卡更改实现任何自定义逻辑。
此外,我AM每次都收到打印语句。
最佳答案
当您在 UITabBarController 中切换选项卡时,您不会从内存中释放前一个选项卡的 Controller 。
这是预期的行为。
如果您返回到您所指的选项卡,您会看到子 VC 还活着并且很好。
在应用程序执行期间,任何选项卡的当前事件 VC 将始终驻留在内存中。
因此,至少,当使用 UITabBarControllers 时,每个选项卡上的根 viewController 都保存在内存中,并且仅在应用程序终止或 tabBarController 终止时释放。
这里没有问题。
关于ios - 在 subview Controller 中取消初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34311732/
在我的gem中,我需要yaml并且在我的本地计算机上运行良好。但是在将我的gem推送到rubygems.org之后,当我尝试使用我的gem时,我收到一条错误消息=>"uninitializedconstantPsych::Syck(NameError)"谁能帮我解决这个问题?附言RubyVersion=>ruby1.9.2,GemVersion=>1.6.2,Bundlerversion=>1.0.15 最佳答案 经过几个小时的研究,我发现=>“YAML使用未维护的Syck库,而Psych使用现代的LibYAML”因此,为了解决
我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我正在写一篇关于在Ruby中几乎一切都是对象的博客文章,我试图通过以下示例来展示这一点:classCoolBeansattr_accessor:beansdefinitialize@bean=[]enddefcount_beans@beans.countendend所以从类中我们可以看出它有4个方法(当然,除非我错了):它可以在创建新实例时初始化一个默认的空bean数组它可以计算它有多少个bean它可以读取它有多少个bean(通过attr_accessor)它可以向空数组写入(或添加)更多bean(也通过attr_accessor)但是,当我询问类本身它有哪些实例方法时,我没有看到默认
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上