[英]iOS/watchos2 - Why doesn't session:didReceiveApplicationContext: fire?
我已經閱讀了以下問答,這很棒。 這正是我在測試項目中所做的,並且工作正常。
現在,我已經創建了我的真實項目,但是在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連接會話,發現此站點非常有幫助。
任何想法(也許不是代碼,而是缺少或不正確的plist設置?)
我遇到了類似的問題(iOS 9.3,watchOS 2.2),其中session: didReceiveApplicationContext:
委托方法在預期的時候不會觸發。 似乎存在一些未記錄的行為,如果字典與發送的先前值匹配,則對updateApplicationContext()
的調用會靜默失敗,既不發送字典也不拋出錯誤(請參閱https://forums.developer.apple.com/thread/46107 )。
該線程提供的解決方案是在測試時向每個字典添加NSUUID().UUIDString
。 為我工作。
找到原因了...
我確實激活了會話,但是在調用過程中為時已晚。
我更改了代碼以報告錯誤:
-(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
頂部,一切都很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.