iPhoneからAppleWatchに連絡先の名前と誕生日を送信するために、ユーザーの連絡先にアクセスしています。私は連絡先にアクセスでき、電話でデータを表示できますが、WatchConnectivityで情報を送信する際に問題があります。私はRay Wenderlichの本WatchOS by Tutorialsをガイドとして使用していますが、まだ問題があります。WatchConnectivityを使用して名前と誕生日をに送信する
ここでは、時計の接続性を設定するために電話機側でAppDelegate.swift
を設定しています。
// MARK: Watch Connectivity
extension AppDelegate: WCSessionDelegate {
func sessionDidBecomeInactive(_ session: WCSession) {
print("WC Session did become inactive.")
}
func sessionDidDeactivate(_ session: WCSession) {
print("WC Session did deactivate.")
WCSession.default().activate()
}
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
if let error = error {
print("WC Session activation failed with error:" + "\(error.localizedDescription)")
return
}
print("Phone activated with state:" + "\(activationState.rawValue)")
}
func setUpWatchConnectivity() {
if WCSession.isSupported() {
let session = WCSession.default()
session.delegate = self
session.activate()
}
}
}
そしてこの
// MARK Watch Connectivity
extension ViewController {
func sendNameAndBirthdayToWatch() {
if WCSession.isSupported() {
let session = WCSession.default()
if session.isWatchAppInstalled {
let nameAndBirthday = ["name": nameLabel.text, "birthday": birthdayLabel.text]
do {
try session.updateApplicationContext(nameAndBirthday)
} catch {
print("Error")
}
}
}
}
}
ViewController.swift
に私が電話でUIButtonとsendNameAndBirthdayToWatch()
を呼んでいます。プロトタイプとして、電話機は現在、Xcodeシミュレータの連絡先から引き出された2つの別々のラベルに名前と誕生日を表示しているので、少なくとも私はデータを取得していることを知っています。
腕時計にはExtensionDelegate.swift
があります。
// MARK: Watch Connectivity
extension ExtensionDelegate: WCSessionDelegate {
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
if let error = error {
print("Activation failed with error: \(error.localizedDescription)")
return
}
print("Watch activated with activation state: \(activationState.rawValue) ")
}
func setupWatchConnectivity() {
if WCSession.isSupported() {
let session = WCSession.default()
session.delegate = self
session.activate()
}
}
func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {
if let name = applicationContext["name"] as? String, let birthday = applicationContext["birthday"] as? String {
InterfaceController.sharedInterfaceController.updateWatchLabel(name: name, birthday: birthday)
}
}
}
これは私が立ち往生した場所です。私はどこが間違っていたのか、そして/または前進する方法がわからない。
私は時計のInterfaceController.swift
にupdateWatchLabel()
と電話していますが、結果は表示されません。
ご協力いただきありがとうございます。私はしっかりした週にこれを見つめていました。残念ながら、Wenderlichの本のサンプルプロジェクトは、私の理解のためには少し複雑です。
私は時間でのXcode 8.2.1およびスウィフト3
シミュレータの代わりに実際のデバイスを使用して試したことがありますか? – ccjensen
@ccjensen WatchConnectivityがウォッチでアクティブになっているというメッセージがコンソールに表示されないということに気付きました。私は現在それに取り組んでいます。 –