早期版本的iOS和watchOS上的新WCSessionDelegate方法的行为

时间:2016-04-06 06:26:35

标签: ios watch-os-2

我正在实施新的WCSessionDelegate方法以支持多个设备配对。

- (void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(nullable NSError *)error;
- (void)sessionDidBecomeInactive:(WCSession *)session;
- (void)sessionDidDeactivate:(WCSession *)session;

我有点不确定这些方法如何适用于旧版本的iOS和watchOS(模拟器非常无用)。

我的假设是这些方法将取代通过以下方法控制的行为,我可以将其排除吗?

- (void)sessionWatchStateDidChange:(WCSession *)session;

有没有人有过使用这些新方法支持旧iOS和watchOS设备组合的经验?

1 个答案:

答案 0 :(得分:0)

新会话激活方法替换状态更改方法。您将继续接收活动手表的状态更改通知,因为某些属性更改可能与正在切换的手表无关。

例如,用户可以安装或删除随播手表应用,或启用或禁用当前活动手表的复杂功能。

支持旧版iOS:

委托方法本身不会在旧版本的操作系统上调用。您只需要确保您不会访问任何属性或调用任何只能在较新版本的操作系统上使用的方法。

您应该use #if available to dynamically check the OS version运行您的应用(因为activationState仅在9.3之后可用。)

以下是演示如何支持多个iOS版本的示例:

private func isValidSession() -> Bool {
    if #available(iOS 9.3, *) {
        guard let session = session where session.activationState == .Activated && session.paired && session.watchAppInstalled else {
            return false
        }
    } else {
        // Fallback on earlier versions
        guard let session = session where session.paired && session.watchAppInstalled else {
            return false
        }
    }
    return true
}

示例代码:

Apple还提供了QuickSwitch sample code,您可能会发现它有助于支持或尝试手表切换。