【问题标题】:Behaviour of new WCSessionDelegate methods on earlier versions of iOS and watchOS新 WCSessionDelegate 方法在早期版本的 iOS 和 watchOS 上的行为
【发布时间】:2016-04-06 06:26:35
【问题描述】:

我正在实现新的 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 设备的组合?

【问题讨论】:

    标签: ios watchos-2


    【解决方案1】:

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

    例如,用户可以安装或删除伴侣手表应用,或者在当前活跃的手表上启用或禁用复杂功能。

    支持旧版本的 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,您可能会发现它有助于支持或尝试手表切换。

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多