9
votes

"Isreachable" est FALSE lors de l'envoi d'un message de Watch App à iOS App

Je souhaite envoyer un message instantané à l'application iOS de Watch App. Mise en œuvre du code suivant dans la version XCode7 Beta 4 et maintenir l'application au premier plan dans les deux simulateurs. Voici le code que j'ai implémenté

dans Watchkit Interfacecontroller P>


    -(void)viewDidLoad 
    {
        [super viewDidLoad];
        if ([WCSession isSupported]){
            WCSession *session = [WCSession defaultSession];
            session.delegate = self;
            [session activateSession];
        }
    }


    -(void)session:(nonnull WCSession *)session 
    didReceiveMessage:(nonnull NSDictionary *)message replyHandler:(nonnull void (^)(NSDictionary * __nonnull))replyHandler 
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.testLbl.text = [message objectForKey:@"key"];
            [self.view setNeedsDisplay];
        });
    }


4 commentaires

Au téléphone, je ne pense pas que vous vouliez faire votre activation de WCSession dans la liste de visionnaire de la vue ViewController, vous devriez le faire dans votre application de délégué didfinishlaunching


@Csmith dans la documentation Apple, ils n'ont jamais mentionné que la méthode d'activation devrait être appelée dans l'application déléguée. Nous devons appeler avant d'envoyer des messages. Lisez le document et commenter. lien


Voir la vidéo Connectivity WWDC 2015, ils vous disent explicitement de ne pas faire ce que vous faites


@Csmith j'ai une application. ça marche bien. consultez lien


3 Réponses :


4
votes

Devez-vous utiliser le SendMessage API? Je les ai trouvés peu fiables et imprévisibles. J'ai fini par utiliser le ApplicationContext API's. La montre ne doit pas nécessairement être accessible, mais si elle est, elle arrive immédiatement, sinon accessible, elle est livrée sur l'application lancement. Chaque fois que vous mettez à jour le contexte de l'application, il écrase la version précédente, ce qui pourrait ne pas être ce que vous recherchez.


0 commentaires

1
votes

Vous devez d'abord vérifier si le cadre de connectivité de la montre est correctement lié, vérifiez également votre code. Après cela, essayez avec "Réinitialiser le contenu et les paramètres" des deux simulateurs, cela a fonctionné pour moi. Si cela ne fonctionne pas encore, essayez de désinstaller et de réinstaller les deux applications des simulateurs. Si cela ne fonctionne toujours pas, essayez de supprimer l'extension de l'application de surveillance des paramètres de l'application de surveillance installée sur le téléphone. J'espère que cela t'aides!


1 commentaires

Cela pourrait être une manière réalisable si le problème se produit très rarement. Malheureusement, cela se produit très souvent pour moi, non seulement sur le simulateur, mais également sur des appareils. Donc, pour moi, ce n'est pas du tout réalisable.



3
votes

J'ai trouvé dans une application iPhone, je travaille actuellement sur cela, je devais avoir le code d'activation de la WCSession dans em> l'appdelegate et le contrôleur d'affichage actuel. ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if ([WCSession isSupported]) {
            WCSession *session = [WCSession defaultSession];
            session.delegate = self;
            [session activateSession];
    }
    ...


1 commentaires

Cela fonctionne pour moi. La chose amusante est que je puisse envoyer des messages directs à la montre après la 1ère activation, bien que Isreachable est toujours faux . Après la 2e activation Isreachable devient true . Apparemment, seul le drapeau retourné est faux.