Есть ли функция для «обработки сообщений», то есть обновления экрана, реагирующего на накопленный пользовательский ввод - PullRequest
0 голосов
/ 28 февраля 2011

Я обнаружил странную ошибку в своем приложении и пытаюсь отладить ее с помощью пошагового выполнения.

Однако, кажется, что вещи на iphone часто происходят не так синхронно, как хотелось бы, например, когда я перехожу эту строку [self.view addSubview: FinndomoEmbeddedMWView.view]; в эмуляторе ничего не происходит Если я просто позволю программе работать, представление будет добавлено, и экран изменится, как и должно.

Итак, я предполагаю, что addSubview не делает всего, что связано с добавлением представления, он просто запускает процесс, а затем завершается позже.

Я не знаю, есть ли очереди сообщений на ios similair для winapi, но должно быть что-то подобное, поэтому есть функция для «обработки всех накопленных сообщений». Затем я хотел бы вызвать эту функцию после моего addSubview и увидеть, как все меняется в эмуляторе во время отладки, а не во время работы программы.

И я испытываю это не только с addSubview, поэтому я хочу иметь общее решение для подобных вещей.

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Сел вчера и узнал ответ:

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

Это вроде , что я хотел. Как вы можете видеть, этот конкретный код может в конечном итоге ждать 0,5 секунды, если больше нет событий, и если есть ожидающие события, он обрабатывает только первое и затем возвращает (согласно документации).

Но этого, конечно, можно избежать, это всего лишь пример, если кто-то захочет того же. В моем случае было только одно важное событие, поэтому предоставленный фрагмент работал.

0 голосов
/ 28 февраля 2011

Короткий ответ - нет.

Какао управляется событиями.

Ядром каждого приложения является цикл обработки событий.При каждом прохождении цикла событий приложение обрабатывает события, добавленные в очередь событий.Обновление экрана - это одно из таких событий.

Таким образом, изменения в отображении экрана не будут выполняться до тех пор, пока ваш код не вернется, при следующем проходе цикла событий.

Для целей отладки, гдевы хотите выяснить, что происходит построчно, вам нужно либо использовать средства отладчика, либо добавить операторы NSLog в свой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...