【问题标题】:iPad Keyboard Rendering - Missing Letters / KeysiPad 键盘渲染 - 缺少字母/键
【发布时间】:2012-07-23 00:26:49
【问题描述】:

我已经在一个应用程序上工作了几个月,在过去一两周内出现了一个奇怪的错误。长时间使用该应用程序(20-30 分钟)后,我们的许多自定义标签(基于 UILabel)停止正确呈现(有些只会显示为空白)。有趣的是,在这种情况下调出键盘会显示以下内容:

在过去的几周里,我对代码库的各个部分进行了多次调整,但无济于事,我希望这里的某个人之前可能偶然发现过类似的问题和/或可能对哪里有一些想法寻找解决方案。

我们在自定义标签中使用大量 CoreGraphics 调用来渲染一些非常复杂的带注释的字符串,并且有相当多的流量在另一个线程的后台服务器上来回传输。关于内存,我们使用的是 ARC,并且我们在任何时候都会在内存中保留大约 5-10Mb 的原始数据 - 我无法想象还有其他任何东西会占用大量内存。

任何关于在哪里寻找的建议将不胜感激。

【问题讨论】:

    标签: ios ipad


    【解决方案1】:

    嗯,不是这个确切的问题,而是在窗口中可见的类似的非常奇怪的东西。它被追踪到来自主线程以外的 UIKit 消息传递。我们最终添加了很多“assert([NSThread isMainThread]);”在我们认为可能在屏幕上绘制的地方,果然,我们找到了有罪的一方。

    【讨论】:

    • +1 用于突出显示 UI 调用需要在主线程上。
    • 非常感谢您的指点,我今天将调查我们的网络或其他线程代码是否可能调用任何 UIKit 方法!好奇怪的bug!
    • 当您发现问题时,请告诉我们问题所在!
    • 遗憾的是,我实际上找不到任何从另一个线程访问 UIKit 的代码(除了网络代码中的一两次 - 但这个错误发生在应用程序不存在时) t 连接到我们的网络)。虽然我已经在 Cthutu 的 sn-p 中结束了我们的 UI 调用,但它仍在发生,但当我们有解决方案时,我会继续调查并更新评论!
    • 好吧,我唯一能做的就是创建一个新项目,在其中放入足够的代码来编写一个自定义标签,创建一个字符串数组,然后在代码中循环编写它一遍又一遍地使用不同的字符串 - 看看你是否可以让它像你现在看到的那样自行损坏。有一个停止按钮,这样你就可以停止迭代(在你看到你可以创建它们之后添加),然后弹出一个键盘。
    【解决方案2】:

    关于在不同线程上进行 UI 调用的主题,我想我可以添加这段代码来演示不同线程如何进行 UI 调用。

    dispatch_sync(dispatch_get_main_queue(), ^{
        // Put your UI code here
    });
    

    这将确保您的代码在运行循环处理期间在主线程上运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      相关资源
      最近更新 更多