gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:01:21 27 4
gpt4 key购买 nike

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

最佳答案

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

例如,用户可以安装或删除配套 watch 应用程序,或者启用或禁用当前事件 watch 上的复杂功能。

支持旧版本的 iOS:

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

你应该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
}

示例代码:

苹果还提供了QuickSwitch sample code您可能会发现它有助于支持或试验 watch 切换。

关于ios - 新 WCSessionDelegate 方法在早期版本的 iOS 和 watchOS 上的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36443153/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com