通过Wormhole传递的Apple Watch数据无法正常工作

时间:2018-07-20 04:31:20

标签: ios swift apple-watch watch-os mmwormhole

我对Apple Watch编程很陌生。我的iPhone模拟器和Apple Watch模拟器已配对,使用模拟器中的Watch app进行了检查。

我需要发送一个确认NSCoding和NSObject协议的对象。我正在利用第三方库虫洞。

我的用于在两者之间进行通信的经理类是

    protocol WatchKitDataManagerDelegate: class {
        func watchKitDataManagerDidUpdateSummary(watchKitDataManager: WatchKitDataManager, contact: UpdatedSummaryModel)
    }

    class WatchKitDataManager: NSObject {

        private let contactClassName = "contact"

        private let wormhole = MMWormhole(applicationGroupIdentifier: "group.com.uvionics.Citta", optionalDirectory: nil)

        weak var delegate: WatchKitDataManagerDelegate?

        // MARK: - Public

        func sendContact(updatedModel: UpdatedSummaryModel) {
            NSKeyedArchiver.setClassName(contactClassName, for: UpdatedSummaryModel.self)
            print("Model to send", updatedModel)
            wormhole.passMessageObject(updatedModel, identifier: contactClassName)
        }

        func readContact() -> UpdatedSummaryModel? {
            NSKeyedUnarchiver.setClass(UpdatedSummaryModel.self, forClassName: contactClassName)
            print("Reading model ", wormhole.message(withIdentifier: contactClassName))
            return wormhole.message(withIdentifier: contactClassName) as? UpdatedSummaryModel
        }

        func startListeningForContactUpdates() {
            wormhole.listenForMessage(withIdentifier: contactClassName) { [unowned self] (message) in
                print("Message Received")
                if let contact = message as? UpdatedSummaryModel {
                    self.delegate?.watchKitDataManagerDidUpdateSummary(watchKitDataManager: self, contact: contact)
                }
            }
        }
    }

我的Apple Watch界面控制器,

class InterfaceController: WKInterfaceController, WatchKitDataManagerDelegate {

    @IBOutlet private weak var nameLabel: WKInterfaceLabel!

    var number = 1

    private let watchKitDataManager = WatchKitDataManager()

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)

        self.nameLabel.setText("Saranjith")
        readContact()
        setupListener()

        // Configure interface objects here.
    }

    override func willActivate() {
        // This method is called when watch view controller is about to be visible to user
        debugPrint("willActive called")
        super.willActivate()
    }

    private func readContact() {
        debugPrint("readContact called")
        if let contact = watchKitDataManager.readContact() {
            setupViewWithContact(contact: contact)
            print("Read contact suceess")
        }
        else {
            print("Read contact failed")
        }
    }

    private func setupListener() {
        watchKitDataManager.delegate = self
        watchKitDataManager.startListeningForContactUpdates()
    }

    private func setupViewWithContact(contact: UpdatedSummaryModel) {
        self.nameLabel.setText("Readed Data")
//        lastNameLabel.setText(contact.lastName)
//        phoneNumberLabel.setText(contact.phoneNumber)
    }

    override func didDeactivate() {
        // This method is called when watch view controller is no longer visible
        super.didDeactivate()
    }

    func watchKitDataManagerDidUpdateSummary(watchKitDataManager: WatchKitDataManager, contact: UpdatedSummaryModel) {
        self.nameLabel.setText("\(number + 1)")
    }

}

当我尝试从Apple Watch调用readContact()时,它没有帮助。

此问题有任何解决方法吗?

0 个答案:

没有答案