草庐IT

ios - 在 iOS 9.2.1/XCode 7.2 中执行 segue 时偶尔出现黑屏

coder 2023-09-20 原文

投票者:如果您也遇到了这个问题,可以告诉我吗?

当我尝试从特定场景上的按钮以模式方式启动 View Controller 时,我看到的问题大约每 15 次发生一次。

这是在 iOS 9.2.1 和 XCode 7.2 上完成的,但不清楚它发生在哪个版本上。 iOS 版本下调并不容易。

症状如下:

  1. 目标 View Controller 在手机上不可见。相反,顶部栏(带有载体的栏)变黑,有时会闪烁,因此整个屏幕完全变黑。启动 View Controller 可见,但没有响应。
  2. 发生这种情况时,我转到 XCode 屏幕并进行 View 调试。值得注意的是,这显示了目的地屏幕,几乎与预期的一样。唯一的区别是其中一个 View 没有完成它的 drawRect,而其他 View 之一看起来全是 Blob 。但当然,它与手机显示的内容完全不符。
  3. 目标屏幕上的取消按钮似乎仍然有效,因为当我按下它应该在的位置时,应用程序会继续运行。如果我尝试使用按钮重新启动屏幕,它再次不起作用。因此,一旦发生这种情况,该 session 的屏幕就会停止工作,并且需要终止并重新启动该应用。

提示不多,但这些信息可能会有所帮助:

  • 目标屏幕上有 3 个包含 View 的 ScrollView 。所有三个 subview 都有自己的 drawRect。事实证明,发生错误时未调用其中一个 drawRects,导致显示灰色背景。有 Blob 的 View 确实运行了,但我不知道为什么它在 View 调试中看起来像那样。
  • XCode 中没有警告。与 NSLayout 约束或演示文稿重叠无关。
  • 在 prepareForSegue 函数的目标 View Controller 上设置了两个字段。
  • segue 通过 Storyboard从时间按钮启动。没有丢失或额外的导出,并且它被正确命名以供准备功能捕获它。

这个问题是偶发的,但如果您连续多次启动/取消,就会可靠地发生。

这是屏幕截图。我不会给你看黑屏。它只是带有载体和时间的黑色。

最佳答案

我已经解决了。结果证明,检查内存使用情况非常有用。

灰色区域应该由画有线条的大背景填充。事实证明,drawBackground 的简单实现导致内存大小膨胀到超过 200MB。我用 CSTiledLayer 替换了它,现在它占用了几 MB。

关于ios - 在 iOS 9.2.1/XCode 7.2 中执行 segue 时偶尔出现黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35087482/

有关ios - 在 iOS 9.2.1/XCode 7.2 中执行 segue 时偶尔出现黑屏的更多相关文章

  1. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  2. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  3. ruby - Chef 执行非顺序配方 - 2

    我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul

  4. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在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返回它复制的字节数,但是当我还没有下

  5. ruby - 为什么 Ruby 的 each 迭代器先执行? - 2

    我在用Ruby执行简单任务时遇到了一件奇怪的事情。我只想用每个方法迭代字母表,但迭代在执行中先进行:alfawit=("a".."z")puts"That'sanalphabet:\n\n#{alfawit.each{|litera|putslitera}}"这段代码的结果是:(缩写)abc⋮xyzThat'sanalphabet:a..z知道为什么它会这样工作或者我做错了什么吗?提前致谢。 最佳答案 因为您的each调用被插入到在固定字符串之前执行的字符串文字中。此外,each返回一个Enumerable,实际上您甚至打印它。试试

  6. ruby-on-rails - 正确的 Rails 2.1 做事方式 - 2

    question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参

  7. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  8. ruby - 检查是否通过 require 执行或导入了 Ruby 程序 - 2

    如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby​​文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否

  9. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  10. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

随机推荐