的iOS / watchos2 - 为什么不会话:didReceiveApplicationCon

2019-10-23 23:39发布

我已阅读Q / A以下时,它的伟大。 这正是我在一个测试项目正在做,并能正常工作。

我现在已经创建了真正的项目,但在观看延伸, session: didReceiveApplicationContext:不火。

这里是我的发送码:

-(void)sendPlistToWatch:(NSMutableDictionary *)dictionary {
    NSLog(@"%s", __FUNCTION__);
    if ([WCSession defaultSession]) {
        NSDictionary *applicationDict = @{@"Favorites.plist":dictionary};
        [[WCSession defaultSession] updateApplicationContext:applicationDict error:nil];

        NSLog(@"sent dictionary");
    } else {
        NSLog(@"not paired");
    }
}

这是对手表的接收代码:

- (void)awakeWithContext:(id)context {
    [super awakeWithContext:context];

    if ([WCSession isSupported]) {
        [self.session activateSession];
        self.session = [WCSession defaultSession];
        self.session.delegate = self;
    }
}

- (void)willActivate {
    [super willActivate];
}

- (void)didDeactivate {
    [super didDeactivate];
}



- (void)session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext {
    NSString *string = [applicationContext objectForKey:@"dictionary"];

    NSMutableDictionary *dictionary = [applicationContext objectForKey:@"dictionary"];

    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog (@"applicationContext: %@", applicationContext);
    });

}

发送iOS和WatchOS之间的消息在watchOS2 WatchConnectivity

我看过的WWDC连接会话,并发现这个网站非常有帮助。

任何想法(也许这不是代码,但缺少或不正确的plist设置?)

Answer 1:

我碰到类似的问题(的iOS 9.3,watchOS 2.2),其中session: didReceiveApplicationContext:预计当委托方法将不会触发。 这似乎有一些无证行为,由此,如果该词典发送的前值相匹配,调用updateApplicationContext()静静地失败,既不送字典也没有抛出一个错误(见https://forums.developer.apple.com/thread/46107 )。

在该线程提供的解决方案是一个增加NSUUID().UUIDString ,同时测试每一个字典。 为我工作。



Answer 2:

找到了症结...

我也激活了会议,但它是在这个过程中来不及叫。

我改变了代码报告错误:

-(void)sendPlistToWatch:(NSMutableDictionary *)dictionary {
    NSLog(@"%s", __FUNCTION__);
    NSError *error = nil;
    if ([WCSession defaultSession]) {
        NSDictionary *applicationDict = @{@"StationFavorites.plist":dictionary};
        [[WCSession defaultSession] updateApplicationContext:applicationDict error:&error];
        if (error) {
             NSLog(@"Problem: @%@", error);
        } else {
             NSLog(@"sent dictionary");
        }

    } else {
        NSLog(@"not paired");
    }
}

这报告的错误7004: WCErrorDomain Code=7004的操作无法完成。 (WCErrorDomain错误7004)。“`

我重置会话出现顶上ViewDidLoad ,一切都很好。



文章来源: iOS/watchos2 - Why doesn't session:didReceiveApplicationContext: fire?