Intereting Posts
Алгоритм всегда суммировать ползунки до 100% неудачных из-за нулей Предел сохранения партии NSManagedObjectContext значок цвета в UITabbar item object-c Память увеличивается / протекает в Core iOS Как создать кнопку с различными типами анимаций Ошибка создания проекта в xCode 7 Beta 6 после того, как он был успешно построен в xCode 6.4 Метод делегирования успеха iOS FBRequest UIBezierPath помещает один цвет для каждой части, что приводит к простому последнему цвету мое приложение падает при добавлении значений из полей в NSDictionary Как создать тип данных только для использования внутри одного класса в объекте-c? Получение неожиданного токена после строковой ошибки Objective-C Панель навигации iOS и UIAutomation Содержимое UIScrollView не отображает полный контент при использовании Autolayout? Как отключить уведомление о предупреждении уведомления по умолчанию на удаленных уведомлениях iOS? EXC_BAD_ACCESS (Code = EXC_ARM_DA_ALIGN) Получено при создании NSDictionary с BOOL

Приложение 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, и модифицировал мой код, но все еще сталкивался с той же проблемой.

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