Intereting Posts
Как показывать объявления на iAds Banner в iOS программно Как обойти ошибку u_path_length в iOS до iOS 10.2 Загрузка PDF из документа URL Связывание статической библиотеки в xamarin У меня есть приложение Objective-C на iOS, как мне построить расширение Swift Watch? Проблема с анимацией панели поиска в панели навигации при активном поискеDisplayController Прямое действие UIButton в IBDesignable для родительского контроллера iOS: Как создать / подготовить пользовательское вложение электронной почты в фоновом режиме, когда уже отображается представление о представлении почты? UITableView не вызывает числоOfRowsInSection или cellForRowAtIndexPath ConvertRect учитывает масштабирование и контент UIScrollView Изображение в списке прокрутки Доступ к элементам iBooks из SDK iOS? interactivePopGestureRecognizer появляется слишком много просмотров Как сделать класс модели для последующего ответа JSON в быстрой iOS Используя UIScrollView, при масштабировании, как я могу сохранить просмотр содержимого в центре?

Приложение Apple watch не работает, когда приложение iPhone находится в состоянии завершения?

Я работаю над приложением apple watch, но сталкиваюсь с какой-то странной проблемой, т. Е. Приложение для наблюдения работает только тогда, когда я вручную открываю приложение для iPhone или когда приложение iPhone находится в фоновом режиме. Когда я завершаю приложение для iPhone и тестирую приложение Apple Watch, оно больше не работает.

Здесь я упомянул поток приложений для просмотра:

  • Когда приложение apple watch запускается, я вызываю веб-api для получения ответа от сервера.
  • Я использовал openParentApplication:reply: метод для вызова web api из родительского приложения
  • Я понимаю, что мне придется вызвать метод web api в фоновом потоке, потому что openParentApplication: reply: метод автоматически открывает родительское приложение в iPhone и приостанавливается в среднем, поэтому, если мы обрабатываем задачу с использованием этого метода, мы должны использовать фоновый поток, как описано в разделе Советы по разработке WatchKit . Поэтому я использую фоновый поток для вызова web api.
  • Когда я получаю ответ, я передаю его, чтобы посмотреть приложение.

Вот прикрепленный фрагмент:

Смотреть приложение – InitialInterfaceController.m

 - (void)awakeWithContext:(id)context { [super awakeWithContext:context]; } - (void)willActivate { [super willActivate]; [self getDetails]; } - (void)getDetails{ //Open parent app [WKInterfaceController openParentApplication:@{@“request”:@“details”} reply:^(NSDictionary *replyInfo, NSError *error) { if (!error) { NSLog(@“Success”); [self parseKPI:replyInfo]; } else{ NSLog(@"Error - %@", error.localizedDescription); } }]; } 

iPhone App – AppDelegate.m

 - (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply{ NSString *request = [userInfo objectForKey:@“request”]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ // Get Details if ([request isEqualToString:@"details"]) { APIHandler *api = [[APIHandler alloc] init]; [api getDetailsUsername:@“my_user_name” onSuccess:^(NSDictionary *details) { dispatch_async(dispatch_get_main_queue(), ^{ reply(details); }); } onFailure:^(NSString *message) { dispatch_async(dispatch_get_main_queue(), ^{ reply(@{@"Error":message}); }); }]; } } 

iPhone App – APIHandler.m

 - (void) getDetailsUsername:(NSString *)username onSuccess:(void(^)(NSDictionary * details))success onFailure:(void(^)(NSString *message))failure{ NSString *urlString = [NSString stringWithFormat:@"%@%@", HOST, DETAILS_API]; urlString = [urlString stringByAppendingFormat:@"?username=%@",username]; urlString = [urlString stringByAppendingFormat:@"&%@", self.APIKeyParameter]; NSURL *url = [NSURL URLWithString:urlString]; NSMutableURLRequest *mutableURL = [NSMutableURLRequest requestWithURL:url]; [NSURLConnection sendAsynchronousRequest:mutableURL queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { if (!connectionError) { NSError *error = nil; NSDictionary *details = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error]; success(details); } else{ failure(@"Connection Error!"); } }]; } 

Но этот подход не работает для меня.

Я обнаружил еще одну проблему в симуляторе приложения часов, т.е. - (void)awakeWithContext:(id)context для моего начального контроллера представления вызывается, но - (void)willActivate метод - (void)willActivate иногда не вызывается, и я просто вижу счетчик приложений для часов. Иногда это работает. Это довольно странно. У меня есть около 15 элементов управления (включая все группы) в исходном интерфейсном контроллере, добавленном с помощью раскадровки.

Я также ссылался на Watchkit, не вызывающий метод willActivate, и модифицировал мой код, но все еще сталкивался с той же проблемой.

Может ли кто-нибудь сообщить мне, почему эта проблема сохраняется в моем приложении?