最初に、「transferUserInfo」メソッドを使用して、辞書を iPhone から Apple Watch に送信します。
let dicty = //...my dictionary of property-list values...
if WCSession.isSupported() {
let session = WCSession.defaultSession()
if session.paired == true { // Check if your Watch is paired with your iPhone
if session.watchAppInstalled == true { // Check if your Watch-App is installed on your Watch
session.transferUserInfo(dicty)
}
}
}
次に、次のデリゲート コールバック メソッド「didFinishUserInfoTransfer」を使用して、転送の状態を確認しています。
func session(session: WCSession, didFinishUserInfoTransfer userInfoTransfer: WCSessionUserInfoTransfer, error: NSError?) {
if error == nil {
let session = WCSession.defaultSession()
let transfers = session.outstandingUserInfoTransfers
if transfers.count > 0 { //--> is always > 0, why ?????????
for trans in transfers {
trans.cancel() // cancel transfer that will be sent by updateApplicationContext
let dict = trans.userInfo
session.transferUserInfo(dict) //--> creates enless-transfer cycle !!!!!
}
}
}
else {
print(error)
}
}
Apple のドキュメントでは、 didFinishUserInfoTransfer メソッドについて次のように述べています。
The session object calls this method when a data transfer initiated by the
current app finished, either successfully or unsuccessfully. Use this method
to note that the transfer completed or to respond to errors, perhaps by
trying to send the data again at a later time.
これまでのところとても良いです-理解しました。しかし今、私には理解できないことがあります:
didFinishUserInfoTransfer が入力され、エラー == nil の場合、一体なぜ session.outstandingUserInfoTransfers COUNT がゼロよりも大きくなるのですか??????
Apple のドキュメントによると、didFinishUserInfoTransfer の唯一の非エラー状態は、転送が終了したときでなければなりません!! 少し終わっていないようです... なぜ???
これについて明確にしていただきありがとうございます。
また、これらの 3 つの方法を正しく使用する方法についてのコード例も嬉しいです。(すなわち
session.transferUserInfo(ディクティ)
didFinishUserInfoTransfer
session.outstandingUserInfoTransfers)