0

我在我的应用程序中遇到了一个奇怪的错误,我正在尝试使用步骤执行对其进行调试。

然而,似乎 iphone 上的事情通常不会像我想要的那样同步发生,例如当我跨过这条线时 [self.view addSubview:FinndomoEmbeddedMWView.view]; 模拟器中什么也没有发生。如果我只是让程序运行,则会添加视图并且屏幕会发生应有的变化。

所以我猜,addSubview 并没有做与添加视图相关的所有事情,它只是启动该过程,然后稍后完成。

不知道ios similair to winapi上是否有消息队列,但肯定有这样的东西,所以有没有“处理所有累积的消息”的功能。然后我想在我的 addSubview 之后调用这个函数,并在我调试时实际看到模拟器中的变化,而不是在程序运行时。

而且我不仅通过 addSubview 体验到这一点,所以我想为这样的事情提供一个通用的解决方案。

4

2 回答 2

1

昨天坐下来发现了答案:

NSDate *dtr = [[NSDate alloc] initWithTimeIntervalSinceNow:0.5];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:dtr];

正是我想要的。如您所见,如果没有更多事件,此特定代码可能最终等待 0.5 秒,如果有未决事件,它只处理第一个然后返回(根据文档)。

但这当然可以避免,这只是一个例子,如果有人想要同样的东西的话。就我而言,只有 1 个重要事件,因此提供的代码段有效。

于 2011-03-01T12:44:48.047 回答
0

最简洁的答案是不。

Cocoa 是事件驱动的。

每个应用程序的核心是事件循环。每次通过事件循环时,应用程序都会处理添加到事件队列的事件。更新屏幕就是这样的事件之一。

因此,在您的代码返回之后,在下一次通过事件循环时,才会更改屏幕显示。

出于调试目的,您想逐行了解发生了什么,您需要使用调试器的工具,或者将 NSLog 语句添加到您的代码中。

于 2011-02-28T15:22:29.697 回答