gpt4 book ai didi

watchkit - WCSessionDelegate : sessionDidBecomeInactive and sessionDidDeactivate have been marked unavailable, 但必需

转载 作者:行者123 更新时间:2023-12-02 21:36:38 26 4
gpt4 key购买 nike

我刚刚使用 Xcode 8 的转换功能将 Swift 2 应用程序转换为 Swift 3。

我的代码有一个标记为WCSessionDelegate的类。

在 Swift 2 中,它编译时没有使用 sessionDidBecomeInactivesessionDidDeactivate 方法。

如果我编译 Swift 3 版本,编译器会提示我的类不符合协议(protocol) WCSessionDelegate,这显然是正确的。
然后它会为这两个函数插入 stub :

public func sessionDidBecomeInactive(_ session: WCSession) { }  
public func sessionDidDeactivate(_ session: WCSession) { }

插入这些 stub 后,会报告以下错误:

Cannot override 'sessionDidBecomeInactive' which has been marked unavailable  
Cannot override 'sessionDidDeactivate' which has been marked unavailable

如何解决这个问题?

最佳答案

由于委托(delegate)方法 sessionDidDeactivatesessionDidBecomeInactive 在 watchOS 上被标记为不可用,因此您必须让编译器忽略共享类中的这些代码。您可以使用以下预处理器宏来执行此操作:

#if os(iOS)
public func sessionDidBecomeInactive(_ session: WCSession) { }
public func sessionDidDeactivate(_ session: WCSession) {
session.activate()
}
#endif

另请注意,我在 sessionDidDeactivate 调用中添加了 activate 调用。这是为了当用户从一个配对的 watch 切换到第二个配对的 watch 时重新激活手机上的 session 。像这样调用它假设您没有其他线程/代码部分需要在切换发生之前给予时间。有关支持快速 watch 切换的更多信息,您应该查看 Apple sample code

关于watchkit - WCSessionDelegate : sessionDidBecomeInactive and sessionDidDeactivate have been marked unavailable, 但必需,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39513461/

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