我试过让 SO 和 Google 就座,但似乎没有人遇到过这个问题。
我的 iOS 应用程序中有两个 ViewControllers。
在 viewControllerA 中,我调用了一个点击事件:
[self performSegueWithIdentifier:@"fooSegue" sender:self];
这称为:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
在 viewControllerA 上
没问题。
但是在那个方法之后,
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
在 viewControllerB 甚至在调用 viewDidLoad 之前被调用。在此阶段,我不需要此方法在此 viewController 上运行。与此同时,viewDidLoad/viewWillApear 在 viewControllerB
prepareForSegue 之后被调用了两次
我试着做一个堆栈 strace 来查看谁在调用它 - 但这是我得到的:
* thread #1: tid = 0x5eac3, 0x0001e859 TestApp`-[viewControllerB prepareForSegue:sender:](self=0x0dad98b0, _cmd=0x0188185a, segue=0x0ce9e6f0, sender=0x0dad98b0) + 89 at viewControllerB.m:444, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1 * frame #0: 0x0001e859 TestApp`-[ViewControllerB prepareForSegue:sender:](self=0x0dad98b0, _cmd=0x0188185a, segue=0x0ce9e6f0, sender=0x0dad98b0) + 89 at ViewControllerB.m:444
frame #1: 0x015f8efa UIKit`-[UIStoryboardSegueTemplate _perform:] + 156
frame #2: 0x015f8f87 UIKit`-[UIStoryboardSegueTemplate perform:] + 115
frame #3: 0x011b32e2 UIKit`-[UIViewController loadViewIfRequired] + 605
frame #4: 0x011b35d9 UIKit`-[UIViewController view] + 35
frame #5: 0x011cd942 UIKit`-[UINavigationController _startCustomTransition:] + 778
frame #6: 0x011da8f7 UIKit`-[UINavigationController _startDeferredTransitionIfNeeded:] + 688
frame #7: 0x011db4e9 UIKit`-[UINavigationController __viewWillLayoutSubviews] + 57
frame #8: 0x0131c0d1 UIKit`-[UILayoutContainerView layoutSubviews] + 213
frame #9: 0x01103964 UIKit`-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 355
frame #10: 0x023e682b libobjc.A.dylib`-[NSObject performSelector:withObject:] + 70
frame #11: 0x0286245a QuartzCore`-[CALayer layoutSublayers] + 148
frame #12: 0x02856244 QuartzCore`CA::Layer::layout_if_needed(CA::Transaction*) + 380
frame #13: 0x028560b0 QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 26
frame #14: 0x027bc7fa QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 294
frame #15: 0x027bdb85 QuartzCore`CA::Transaction::commit() + 393
frame #16: 0x0287b5b0 QuartzCore`+[CATransaction flush] + 52
frame #17: 0x010929bb UIKit`_UIApplicationHandleEventQueue + 13095
frame #18: 0x02a1e77f CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
+ 15
frame #19: 0x02a1e10b CoreFoundation`__CFRunLoopDoSources0 + 235
frame #20: 0x02a3b1ae CoreFoundation`__CFRunLoopRun + 910
frame #21: 0x02a3a9d3 CoreFoundation`CFRunLoopRunSpecific + 467
frame #22: 0x02a3a7eb CoreFoundation`CFRunLoopRunInMode + 123
frame #23: 0x04bca5ee GraphicsServices`GSEventRunModal + 192
frame #24: 0x04bca42b GraphicsServices`GSEventRun + 104
frame #25: 0x01094f9b UIKit`UIApplicationMain + 1225
frame #26: 0x0011112d TestApp`main(argc=1, argv=0xbfffedf8) + 141 at main.m:16
我不知道该怎么做。
任何人都可以了解这里发生的事情吗?
最佳答案
如果目标场景有一个您通过 Interface Builder 添加的“容器 View ”,它包含一个嵌入转场,当您转换到父 View Controller 时会自动调用它。这个 segue 将触发 subview Controller 及其 View 的实例化,这个过程最终会在父 View Controller 上调用 prepareForSegue,让它有机会传递 subview Controller 可能传递的任何信息需要(如果有的话)。
您应该看到 viewDidLoad、viewDidAppear 等在目标的父 View Controller 以及 subview Controller 上被调用。
关于ios - prepareForSegue 在 viewDidLoad 之前调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23890428/
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
这里有一个很好的答案解释了如何在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返回它复制的字节数,但是当我还没有下
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时