即使我使用了AppGroup

时间:2018-04-20 22:08:28

标签: ios swift apple-watch

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

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

但它仍无法按预期工作

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

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

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

任何回复都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

尝试访问两个设备上的数据时,不再可以选择应用组。

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

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