Ios iPad键盘渲染-缺少字母/键

Ios iPad键盘渲染-缺少字母/键,ios,ipad,Ios,Ipad,我已经在一个应用程序上工作了好几个月了,最近一两周出现了一个奇怪的bug。在长时间使用该应用程序(20-30分钟)后,我们的许多自定义标签(基于UILabel)将停止正确渲染(有些将显示为空白)。有趣的是,在这种情况下打开键盘显示以下内容: 在过去的几周里,我对代码库的各个部分进行了多次调整,但都无济于事,我希望这里的某个人以前可能遇到过类似的问题,并且/或者可能对在哪里寻找解决方案有一些想法 我们在自定义标签中使用了大量的CoreGraphics调用来呈现一些非常复杂的带注释的字符串,并且在

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

在过去的几周里,我对代码库的各个部分进行了多次调整,但都无济于事,我希望这里的某个人以前可能遇到过类似的问题,并且/或者可能对在哪里寻找解决方案有一些想法

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


任何关于去哪里看的建议都将不胜感激。

好吧,不是这个确切的问题,而是在窗口中可以看到类似的非常奇怪的东西。它是从主线程以外的其他线程跟踪到消息UIKit的。最后,我们在屏幕上可能出现的地方添加了很多“assert([NSThread isMainThread]);”,果然,我们找到了罪魁祸首。

好吧,不是这个确切的问题,但在窗口中可以看到类似的非常奇怪的东西。它是从主线程以外的其他线程跟踪到消息UIKit的。最后,我们在屏幕上绘制的地方添加了很多“assert([NSThread isMainThread]);”,果然,我们找到了罪魁祸首。

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

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

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

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

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

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

+1为了突出显示UI调用需要在主线程上。非常感谢指针,今天我将调查一下我们的网络或其他线程代码是否正在调用任何UIKit方法!这么奇怪的虫子!当您发现问题时,请务必让我们知道是什么问题!不幸的是,我实际上找不到任何从另一个线程访问UIKit的代码(除了网络代码中的一次或两次——但这个错误是在应用程序未连接到我们的网络时发生的)。虽然我已经在Cthutu的代码片段中结束了我们的UI调用,但它仍然在发生,但我会继续调查,并在找到解决方案后发表评论进行更新!嗯,我唯一能做的另一件事就是创建一个新项目,在其中放入足够的代码来编写一个自定义标签,创建一个字符串数组,然后在代码中用不同的字符串反复编写它——看看你是否能让它像你现在看到的那样损坏自己。有一个停止按钮,这样你可以停止迭代(在你看到你可以创建它们之后添加),然后弹出一个键盘。+1用于突出显示UI调用需要在主线程上。非常感谢指针,今天我将调查一下我们的网络或其他线程代码是否可能正在调用任何UIKit方法!这么奇怪的虫子!当您发现问题时,请务必让我们知道是什么问题!不幸的是,我实际上找不到任何从另一个线程访问UIKit的代码(除了网络代码中的一次或两次——但这个错误是在应用程序未连接到我们的网络时发生的)。虽然我已经在Cthutu的代码片段中结束了我们的UI调用,但它仍然在发生,但我会继续调查,并在找到解决方案后发表评论进行更新!嗯,我唯一能做的另一件事就是创建一个新项目,在其中放入足够的代码来编写一个自定义标签,创建一个字符串数组,然后在代码中用不同的字符串反复编写它——看看你是否能让它像你现在看到的那样损坏自己。有一个停止按钮,这样您就可以停止迭代(在看到可以创建迭代后添加迭代),然后弹出一个键盘。