【问题标题】:iOS 9 Segue Causes App To Freeze (no crash or error thrown)iOS 9 Segue 导致应用程序冻结(没有崩溃或错误抛出)
【发布时间】:2015-12-15 02:46:49
【问题描述】:

我已经在这个应用程序上工作了几个月,从我记事起,我从来没有遇到过 segues 的问题。代码在调用performSegueWithIdentifier 方面没有变化,但自从我最近更新到 Xcode 7 和 iOS 9 后,我一直无法解决这个问题。

我试过了:

  • 删除按钮并使用 segue 链接创建新按钮
  • 使用直接从按钮切换到视图,不使用performSegueWithIdentifier
  • 将按钮连接到新的空白视图控制器

当我按下按钮时,没有在目标 VC 上调用初始加载函数(例如:ViewDidLoadViewWillAppear 等)。当我将它连接到空白视图时,segue 使用相同的代码可以正常工作。

由于代码从不停止或中断,并且似乎在仍在 Xcode 上运行时“冻结”到位,我似乎无法将其缩小到导致问题的原因。我有一个类似的 segue,它也是从同一个 ViewController 上的另一个按钮调用的,没有任何问题。

非常感谢您对此事的任何想法!

编辑:我已将问题缩小到导致问题的UITextView。删除文本视图后,页面会通过 segue 正常加载。我想知道 iOS 8 和 iOS 9 之间在 UITextView 方面发生了什么变化,因为我必须删除文本视图并完全重新添加新的文本视图。

【问题讨论】:

  • 此问题已在 Xcode 7.1.1 及更高版本中得到解决。它与 UITextView 中字符串的长度以及 iOS 9 中的标记指针有关。从不需要删除 UITextView 对象,只需确保文本为空或长度超过 ~12 个字符即可。

标签: ios uiviewcontroller segue swift2 uistoryboardsegue


【解决方案1】:

所以基本上由于我在destinationViewController 中使用的UITextView,segue 被冻结了。以下解决了这个问题:

  • 删除所有UITextView
  • 添加新的 UITextView
    • 您必须保留默认的 lorem 强加文本并在 viewDidLoad() 中以编程方式更改它

这是对我的修复,从我对该问题所做的研究来看,这似乎是 iOS 9 和 Xcode 7 中的一个错误。

干杯!


注意:删除 UITextView 中的文本(或使其长于约 12 个字符)足以解决它,无需删除并重新创建它们。 这已在 Xcode 7.1.1 及更高版本中修复。

【讨论】:

  • 我也遇到了这个问题...您在哪里找到有关该错误的文档?
  • 这是我在 iOS 上遇到过的最疯狂的错误之一 :( ...对我来说,我在 UITextView 的 Text 属性中有自己的占位符。我删除了该占位符并重新编译以取得胜利。不必删除UITextView
  • 谢谢 Zachary,遇到了同样的问题。我试图在我的应用程序中找到问题 40 小时,我什至无法入睡。真的是要疯了。你救了我接下来的日子:)
  • 很高兴能帮上忙!
  • 这似乎是一个非常大的错误 - 有没有其他方法可以解决?
【解决方案2】:

我遇到了同样的问题,这篇文章 (Xcode 7 crash: [NSLocalizableString length] 30000) 中的修复为我解决了这个问题。

首先是启用故事板基础以外的本地化(请参阅https://stackoverflow.com/a/32688815/3718974

二是关闭基础本地化(见https://stackoverflow.com/a/32719247/3718974

【讨论】:

    【解决方案3】:

    我想我有同样的问题:我有一个 UITabelView,其中包含从 nib 文件创建的单元格,当用户点击一个单元格时,此方法被调用:

    当我有以下方法 prepareForSegue:: 应用程序崩溃:

    如果我删除第 129 行一切正常,则方法 prepareForSegue:: 打开右侧视图,标签 contactName 将显示其默认文本。 如果我修改方法如下 prepareForSegue:: 得到你所期望的,没有任何类型的错误:

    如果你也得到相同的结果,请告诉我

    【讨论】:

      【解决方案4】:

      任何遇到此问题的人,我通过关闭模拟器窗口调试中的“优化窗口比例渲染”选项来解决它。我已经尝试了上述所有答案,但无法解决问题。

      【讨论】:

        【解决方案5】:

        在您激活 segue 的第一个 viewController 的方法中,您是否在任何地方都有 beginIgnoringInteractionEvents?如果是这样,您继续访问的屏幕将被冻结并会忽略您所描述的交互事件。如果是这种情况,您可以通过在 segue 方法之前添加 endIgnoringInteractionEvents 方法来解决此问题:

        UIApplication.sharedApplication().endIgnoringInteractionEvents() self.performSegueWithIdentifier("editItemToMyGearSegue", sender: self)

        【讨论】:

          【解决方案6】:

          我意识到这是一个老话题,但似乎仍然相关。我在 Xcode 9、iOS11 中遇到了同样的问题。我的 UITextViews 嵌入在 UITableViewCells 中。与此处描述的症状相同。默认文本和占位符的技巧对我没有任何帮助,但我通过关闭 xib 中文本视图的滚动指示器解决了这个问题。我猜它们是默认开启的,虽然没有使用。

          编辑:这可能是一个重要的细节......挂起的视图都有一个图像 NSTextAttachment 在文本视图的属性字符串中。我认为图像比可用的表格单元格内容更宽。关闭滚动后,它们似乎缩小了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-21
            相关资源
            最近更新 更多