5

开发 iPhone 应用程序。

我有一个非常奇怪的问题,每隔一段时间,我的应用程序屏幕顶部的状态栏就会变成纯黑色。不像状态栏的黑色版本,而是像没有文本/图标的纯黑色矩形。这种情况非常罕见,但通常似乎发生在通过多任务或从锁定设备返回应用程序后(应用程序一直在后台运行)。我已经看到它发生在 3GS 和 iPhone4 上。这是一个屏幕截图:

在此处输入图像描述

尝试时我永远无法重现它,它似乎最终会在某个时候发生(有时它会持续数天而不会发生)。

一旦发生,应用程序似乎继续正常运行,即使状态栏消失了,除非我在应用程序中执行一项特定操作,这将导致一切突然冻结(应用程序不会崩溃,但屏幕上的所有内容都被冻结且非交互)。在没有详细解释设计的情况下,导致它冻结(在出现错误之后)的具体操作是在后台执行简单的上传到 SQL 数据库。一旦出现黑色状态栏,重置应用程序是解决问题的唯一方法。

还有其他人经历过吗?我在任何地方都找不到解释类似行为的单个线程,这让我发疯了。

4

4 回答 4

2

它在我的应用程序中发生过一次,当时我在 UIView 实例的自定义子类中调用了一个绘图方法,然后将它作为子视图添加到父视图。

解决方案显然很简单:在发送/调用任何自定义绘图方法之前先将其添加为子视图。

例子:

CustomView *aView = [[CustomView alloc] init];

[aView drawSomething];

[self.view addSubview:aView]; //wrong approach
[aView release];

应该:

CustomView *aView = [[CustomView alloc] init];

[self.view addSubview:aView];
[aView release];

[aView drawSomething];
于 2011-07-22T19:16:10.977 回答
0

您是否持有对QLPreviewController实例的引用?我能够在我的应用程序中解决这个问题,方法是QLPreviewController每当我需要以模态方式显示文件时创建一个新的自动释放文件,而不是一遍又一遍地重用同一个实例。

于 2011-03-22T20:19:25.770 回答
0

屏幕截图不见了,但您所描述的听起来好像您错误地实现了使用 Apple 的内置视图控制器。

如果UINavigationController 和 UITabBarController 检测到当前屏幕上“应该”是一个状态栏,它们将自动将其中的所有内容向下移动 20 像素。

我的猜测是,您有一些代码正在删除状态栏,但在 Apple 代码已经检测到它并将所有内容向下移动以适应之后,它正在启动。

“修复”是非常仔细地重新阅读有关 Apple 课程的文档并按照 Apple 的指示使用它们(通常,人们以看似合理的方式使用它们 - 例如将它们嵌入到其他视图中 - 但 Apple 明确声明不受支持。可悲的是,Apple 的那些课程非常脆弱)

于 2011-03-18T15:30:19.067 回答
0

我有一个类似的问题,我在这个问题here中描述过

如果有,请尝试删除通过引用创建的任何 CGRect 框架:[UIScreen mainScreen].applicationFrame],而是使用更手动的定义创建框架。如果可行,您可以决定如何从该点开始。

于 2013-11-17T22:19:45.987 回答