我对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()时,它没有帮助。
此问题有任何解决方法吗?