簡體   English   中英

iOS / watchos2-為什么session:didReceiveApplicationContext:不會觸發?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM