2014-01-20 3 views
1

Я хочу сделать простое действие, получить локальное уведомление и открыть приложение для карты Apple. Когда я получаю уведомление, а затем меняю его, первое приложение открывается, и это нормально. Но мне нужно подождать около 10 секунд, и приложение карты будет открыто. почему он задерживается? Это должно быть мое приложение открыто, а затем карта делает прямо.открыть карту приложение медленно под didReceiveLocalNotification

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
    CLLocationCoordinate2D rdOfficeLocation = CLLocationCoordinate2DMake(latitude,longitude); 
    MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:rdOfficeLocation addressDictionary:nil]; 
    MKMapItem *item = [[MKMapItem alloc] initWithPlacemark:placemark]; 
    [item openInMapsWithLaunchOptions:nil]; 
} 

ответ

0

Вы можете попробовать оборачивать код с этим:

dispatch_async(dispatch_get_main_queue(), ^{ 
    // Your code here 
}); 
0

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

+0

Я добавил MBProgressHUD в didReceiveLocalNotification, он имеет ту же ситуацию, приложение заморозить около нескольких секунд, а затем всплывает MBProgressHUD. – liming

+0

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

+0

Вам нужно инициализировать карту в viewDidLoad, добавить и показать MBProgressHUD после карты init. И когда вы вычисляете весь элемент (в didReceiveLocalNotification), вы скрываете MBProgressHUD и перезагружаете элементы на карте. Эта карта будет загружаться, когда вы дожидаетесь местоположения позиций – larva

0

Я только что был имея эту проблему самостоятельно, а не с картами, но с использованием пользовательских схем URL для глубокой ссылки на другие приложения. Проблема в том, что ваше приложение не закончило возобновление, когда вы говорите ему, чтобы он переключился на Карты. Это вызывает 10-секундную задержку. Если вы отлаживаете, вы, вероятно, обнаружите, что didReceiveLocalNotification выполняет и зависает некоторое время при вашем вызове на Карты. Затем, после завершения этого вызова, он все равно должен выполнить applicationDidBecomeActive внутри вашего AppDelegate.

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

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { 
{ 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    CLLocationCoordinate2D rdOfficeLocation = CLLocationCoordinate2DMake(latitude,longitude); 
    MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:rdOfficeLocation addressDictionary:nil]; 
    MKMapItem *item = [[MKMapItem alloc] initWithPlacemark:placemark]; 
    [item openInMapsWithLaunchOptions:nil]; 
    }); 
} 

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

  • Нет связанных вопросов^_^