2015-03-07 13 views
5

Widziałem raporty o błędach 4, ale nie dla 5. Otrzymuję to jako komunikat konsoli, gdy próbuję użyć żądania "openParentApplication: reply". W dzienniku nie ma wystarczających informacji, aby wiedzieć, czy problem dotyczy kodu iOS, kodu WK czy symulatora. Ponownie uruchomiłem sim i wyczyściłem projekt. Jakieś pomysły?Błąd iOS: FBSOpenApplicationErrorDomain error 5. Co to oznacza?

WK Kod:

- (IBAction)sendRequest { 

    NSDictionary *request = @{@"request":@"Request1"}; 

    [InterfaceController openParentApplication:request reply:^(NSDictionary *replyInfo, NSError *error) { 

     if (error) { 
      NSLog(@"%@", error); 
     } else { 

      [self.label1 setText:[replyInfo objectForKey:@"response1"]]; 
      [self.label2 setText:[replyInfo objectForKey:@"response2"]]; 
      [self.label3 setText:[replyInfo objectForKey:@"response3"]]; 
     } 

    }]; 
} 

Kod iOS:

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply{ 

    NSLog(@"%s", __FUNCTION__); 
    //([max intValue] - [min intValue]) + [min intValue] 

    int randNum1 = arc4random_uniform(16); 
    int randNum2 = arc4random_uniform(16); 
    int randNum3 = arc4random_uniform(16); 


    NSString *num1 = [NSString stringWithFormat:@"Test%d", randNum1]; 
    NSString *num2 = [NSString stringWithFormat:@"Test%d", randNum2]; 
    NSString *num3 = [NSString stringWithFormat:@"Test%d", randNum3]; 

    if ([[userInfo objectForKey:@"request"] isEqualToString:@"Request1"]) { 

     NSLog(@"containing app received message from watch: Request1"); 


     NSDictionary *response = @{@"response1" : num1, @"response2" : num2, @"response3" : num3}; 
     reply(response); 
    } 

} 

Jedyny dziennik konsoli:

WatchKit Extension[48954:9523373] Error Domain=FBSOpenApplicationErrorDomain Code=5 "The operation couldn’t be completed. (FBSOpenApplicationErrorDomain error 5.) 
+2

OK. Zgodnie z obietnicą, odpowiedź brzmi następująco: W pliku info.plist ustawiłem "Aplikacja nie działa w tle" na TAK. To spowodowało problem. Zmiana tego ustawienia na NIE naprawiła to. Dzięki Faber na forach AppleDev. –

Odpowiedz

1

Proponuję spróbować uprościć. Odpowiedziałem na bardzo podobny problem here, który jest w Swift. Chciałbym uprościć logiki do poniższego:

Kodeksu WK

- (IBAction)sendRequest { 
    [InterfaceController openParentApplication:request reply:^(NSDictionary *replyInfo, NSError *error) { 
     NSLog(@"Reply Info: %@", replyInfo); 
     NSLog(@"Error: %@", error); 
    }]; 
} 

kod iOS

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply { 
    NSDictionary *response = @{@"replyKey" : @"replyValue"}; 
    reply(response); 
} 

Po tej obróbce, a następnie rozpocząć dodawanie dodatkowego parsowania krok po kroku czas. Możesz także dołączyć debugger do aplikacji iOS, aby wykonać krok po kroku, postępując zgodnie z instrukcjami these. Nie możesz wywoływać bloku odpowiedzi w aplikacji na iOS i nawet o tym nie wiesz.

+0

Dzięki za odpowiedź. Zmierzam w tym kierunku. Wierzę, że dostaję się do bloku odpowiedzi, ponieważ zarejestrowałem błąd.Występuje tam. Ale przejrzę twoje pomysły bardziej ostrożnie .. –

+0

To intrygujące, odpowiedź od NSLog (@ "Reply Info:% @", replyInfo); jest null .. Zastanawiam się, czy coś przeoczyłem ... Mam połączenie działające w małym projekcie testowym, i nie widzę żadnej różnicy-- z wyjątkiem - że druga aplikacja miała zainstalowany WK od samego początku, nie zaryglowane. Czy uważasz, że ma to coś wspólnego z tym problemem? –

+0

Obawiam się, że nie rozumiem tego, co masz na myśli. Powiedziałbym, że jeśli pracujesz w mniejszym projekcie, a nie większym, to masz problem z konfiguracją projektu z większym. Jeśli tak, to proponuję otworzyć zupełnie inne pytanie, aby zamknąć to rozwiązanie jako rozwiązane. – cnoon

5

Dziś spotkałem się z tym samym problemem.

  • usuniętych aplikacji z symulatora
  • reset symulator
  • spowodowała ponowne uruchomienie XCode
  • dokonała zmian w info.plist

ale kiedy prowadził aplikację w Production, to działało. Aplikacja działała dobrze w trybie produkcji z symulatorem.

enter image description here

Następnie Usunąłem istniejące dev schemat trybu i stworzył kolejną dev schemat trybu i to działało. Wtedy przypomniało mi się, że podczas wdrażania funkcji pobierania w tle w aplikacji, sprawdziłem opcję opcji Launch due to a background fetch event w tym schemacie Dev. Później zrezygnowałem z Background Fetch, ale zapomniałem odznaczyć tę opcję.

enter image description here

+0

Uważam, że musisz ustawić uprawnienie do korzystania z tego. W każdym razie Xcode powinien zgłosić DLACZEGO nie może uruchomić aplikacji zamiast tego lub zgłosić "błąd 5". Właśnie wpadłem na to dzisiaj z Xcode 7.3, ponieważ sprawdziłem tę opcję schematu. –

1

W moim przypadku tylko porzuceniem symulator rozwiązany.