即使我使用了 AppGroup,我的 Iwatch 也没有从 ios 应用程序中保存数据

My Iwatch does not get data saved from ios App even though I used AppGroup

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

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

但它仍然没有按预期工作

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

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

经过所有这些尝试,我的 Iwatch 仍然无法使用我在 ios 应用程序上设置的 preferences/data。

如能解决此问题,我们将不胜感激。

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

您现在需要使用 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])
    }
}

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