iOS / watchos2 – 为什么不会话:didReceiveApplicationContext:火?

我已经阅读了下面的q / a,这很好。 这正是我在testing项目中所做的,并且工作正常。

我现在创build了我的真实项目,但在Watch扩展中, 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); }); } 

在WatchOS2中使用WatchConnectivity在iOS和WatchOS之间发送消息

我已经观看了WWDC连接会话,并且发现这个网站非常有帮助。

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

我碰到类似的问题(iOS 9.3,watchOS 2.2),其中session: didReceiveApplicationContext:委托方法不会在预期的时候触发。 看起来有一些未公开的行为,如果字典匹配之前发送的值,则对updateApplicationContext()的调用将自动失败,既不发送字典也不抛出错误(请参阅https://forums.developer.apple.com/thread/46107 )。

该线程提供的解决scheme是在testing时为每个字典添加一个NSUUID().UUIDString 。 为我工作。

find原因…

我确实激活了会话,但是在被调用的过程中已经太晚了。

我改变了代码来报告错误:

 -(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顶部,一切都很好。