【问题标题】:My Iwatch does not get data saved from ios App even though I used AppGroup即使我使用了 AppGroup,我的 Iwatch 也没有从 ios App 中获取数据
【发布时间】:2023-04-03 07:45:01
【问题描述】:

我已经阅读并遵循了几个说明和视频,试图让我的 iphone 和 iwatch 应用程序使用相同的 Userdefaults 存储。 我已经创建了一个应用组并使用了这样的应用组名称

preferences = UserDefaults(suiteName: "group.com.xxxx.appname")!

但它仍然无法按预期工作

我已经阅读了关于 stackoverflow 的几乎所有(如果不是全部)与此相关的问题,但我仍然没有得到预期的结果。

我读到的最后一篇文章建议使用 WCSession,所以我关注了这个 url http://www.codingexplorer.com/watch-connectivity-swift-application-context/

在所有这些尝试之后,我的 Iwatch 仍然无法使用我在我的 ios 应用上设置的首选项/数据。

对于解决此问题,我们将不胜感激。

【问题讨论】:

    标签: ios swift apple-watch


    【解决方案1】:

    在尝试访问两台设备上的数据时,应用组不再是一个选项。

    您现在需要使用WatchConnectivity 框架。

    这是一个如何使用它的示例:

    IOS

    import WatchConnectivity
    
    class ViewController: UIViewController, WCSessionDelegate{
    
       override func awake(withContext context: Any?) {
            super.viewDidLoad()
            if WCSession.isSupported(){
                WCSession.default.activate()
                WCSession.default.delegate = self
            }
        }
    
    }
    

    watchOS

    import WatchConnectivity
    
    class InterfaceController: WKInterfaceController, WCSessionDelegate{
    
        override viewDidLoad(){
            super.viewDidLoad()
            if WCSession.isSupported(){
                WCSession.default.activate()
                WCSession.default.delegate = self
                let data = ["data1": 1, "data2": 2]
                WCSession.default.sendMessage(data, replyHandler: {reply in 
                    print("Got reply \(reply)")
                }, errorHandler: {error in 
                    print("Got error \(error)")
                })  
            }
        }
        func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {    
            print("Received \(message)") // ["data1": 1, "data2": 2]
            replyHandler(["messagedReceived": true])
        }
    }
    

    以上代码未经测试,但足以让您入门。

    【讨论】:

    • 谢谢,但这正是我在遵循本教程 codingexplorer.com/watch-connectivity-swift-application-context 时尝试过的第二件事,正如我在原始帖子中提到的那样。
    • 这没有使用应用程序上下文。应用程序上下文由操作系统自行决定,sendMessage 更快
    • 谢谢,我可以使用 WCSession.default.sendMessage。但是我必须在 override func willActivate() ** 中执行 session.activate() 而不是在 **awake 方法中
    猜你喜欢
    • 2017-09-24
    • 2020-01-30
    • 2022-12-08
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多