使用 transferFile 时 Apple Watch 和 iPhone 之间的连接丢失

问题描述

我想将文件从手机传输到手表。它基本上可以工作,但在几天不使用该应用程序后,有时文件将不再从手机传输到手表。手表应用和手机应用之间的连接似乎没有任何原因,我无法再次建立连接。这是操作系统中的错误还是我的实现不干净?

这是手机的代码

class WatchConnectivity: NSObject,WCSessionDelegate {
    private let session: WCSession
    
    init(session: WCSession = .default) {
        self.session = session
        super.init()
        self.session.delegate = self
        session.activate()
    }
    
    func session(_ session: WCSession,activationDidCompleteWith activationState: WCSessionActivationState,error: Error?) {
        if activationState == .activated {
            if session.isWatchAppInstalled {
                print("Watch app is installed")
            } else {
                print("Watch app is NOT installed")
            }
        }
    }
    
    func initializeWCSession() {
        if WCSession.isSupported() {
            session.delegate = self
            session.activate()
        } else {
            print("WCSession not supported !")
        }
    }
    
    func sessionDidBecomeInactive(_ session: WCSession) {
        WCSession.default.activate()
    }
    
    func sessionDidDeactivate(_ session: WCSession) {
        WCSession.default.activate()
    }
    
    func session(_ session: WCSession,didFinish fileTransfer: WCSessionFileTransfer,error: Error?) {
        print("error file transfer: ",error as Any)
    }
    
    
    func sendFiletoWatch(image: UIImage) {
        if WCSession.isSupported() {
            if session.activationState == .activated {
                guard let imageURL = NSURL(fileURLWithPath: NstemporaryDirectory()).appendingPathComponent("TempImage.png") else { return }
                
                if let data = image.jpegData(compressionQuality: 0.0) {
                    do {
                        try data.write(to: imageURL)
                    } catch {
                        print("Handle the error,i.e. disk can be full")
                    }
                }
                session.transferFile(imageURL,Metadata: nil)
            } else {
                print("session not activated")
            }
            
        }
    }
    
}

这是手表的代码

class WatchConnectivity: NSObject,WCSessionDelegate {

func session(_ session: WCSession,error: Error?) {
    
}

var session: WCSession

init(session: WCSession = .default) {
        self.session = session
        super.init()
        self.session.delegate = self
        session.activate()
    }

func initializeWCSession() {
    if WCSession.isSupported() {
        session.delegate = self
        session.activate()
        print("WCSession is supported !")
    } else {
        print("WCSession not supported !")
    }
}

 
func session(_ session: WCSession,didReceive file: WCSessionFile) {
    dispatchQueue.main.sync  {
        if let imageData = NSData.init(contentsOf: file.fileURL) {
            let receivedImage = UIImage(data: imageData as Data)
            print("image received !")
        } else {
            print("something is wrong with the sent image")
        }
    }
   
}

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)