2010-02-17 2 views
0

У меня проблема с функцией, выполняющейся до того, как предыдущая закончилась. Согласно журналам, они оба запускаются, но это почти так, как если бы функция, вызванная из AppDelegate, помещалась в отдельный поток.Функция работает, не дожидаясь завершения предыдущего.

-(IBAction) checkLocation { 
[AppDelegate locateMe]; 
[self checkForChangeAndReloadTable];  
} 

Функция locateMe может быть вызвана из нескольких видов, которые будут делать разные вещи с информацией. Он находит местоположение пользователя и сохраняет его по умолчанию. checkForChangeAndReloadTable проверяет значения по умолчанию и, если местоположение изменилось, перезагружает таблицу новой, более релевантной информацией. Кажется, что изменение происходит после того, как оно проверяется, так что это работает, если функция checkLocation вызывается дважды пользователем.

Ожидается ли это? Любые идеи, как обойти это?

+0

Просто может быть, что вывод в журналы не сбрасывается сразу, поэтому кажется, что они оба записывают в журнал на то же время .. –

+0

Я не просто получаю это из журналов. Приведенная таблица не перезагружается, если я не нажму кнопку дважды. – Nik1777

ответ

1

Не видя никакого исходного кода в методах locateMe или checkForChangeAndReloadTable, нельзя сказать, но несколько методов CoreLocation выполняются асинхронно, что, вероятно, является вашей проблемой.

+0

Звучит вполне вероятно. Благодарю. Хорошо знать, что дело не только в том, что я вызываю функцию из AppDelegate. Как насчет функции, которая работает все время и прослушивает изменения по умолчанию для пользователя? Возможно, какой-то асинхронный таймер. Кажется, это может сработать? (Возможно, вы можете сказать, что я совершенно новичок в этом!) – Nik1777

+0

CoreLocation имеет несколько доступных методов делегатов. Переосмыслите свою стратегию: вместо того, чтобы постоянно проверять, доступны ли их обновления, позвольте методам делегата вызываться при появлении новой информации. –

1

Вы можете использовать оповещения для обработки асинхронных событий. Основная идея состоит в том, чтобы установить уведомление, которое вызывает checkForChangeAndReloadTable, когда locateme завершает

+0

Спасибо. Никогда не делал этого раньше. Я пытаюсь найти учебник по Google, когда мы говорим. Много материала о push-уведомлениях, а не о том, о чем вы говорите. Любые предложения о том, куда мне следует обратиться за дополнительной информацией? – Nik1777

+0

Найдено один. http://jamesabrannan.com/wordpress/wp-content/uploads/2009/08/NSNotification.pdf – Nik1777

Смежные вопросы