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