1

時計と通信する iOS アプリを作成しようとしていますが、通信が遅すぎるか、データがまったく転送されないなど、常に一貫性のない動作が発生します。

その上、watchKit の実行時に「Phone disabled」画面が表示されません (最初に電話からデータを取得する必要があるため、クラッシュが発生します)。

これは、iPhoneアプリでWCSessionを確立することに関して私が持っているものです

アプリ デリゲート

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

       if NSClassFromString("WCSession") != nil {
            if #available(iOS 9.0, *) {
                if(WCSession.isSupported()){
                    self.session = WCSession.defaultSession()
                    self.session.delegate = self
                    self.session.activateSession()
                    if session.paired {
                        print("Watch connected")
                    } else {
                        print("No watch")
                    }
                }
            } else {
            }}

        if NSClassFromString("WCSession") != nil {
            if(WCSession.isSupported()){
                session.sendMessage(["b":"delegateSaysHi"], replyHandler: nil, errorHandler: nil)
            }}
}

MainViewController (viewDidLoad)

if NSClassFromString("WCSession") != nil {
        if(WCSession.isSupported()){
            self.session = WCSession.defaultSession()
            self.session.delegate = self
            self.session.activateSession()
            if session.paired {
                print("Watch connected")
            } else {
                print("No watch")
            }
    }}

MainViewController (iOSアプリからwatchKitアプリへ大量のデータを転送するメソッド)

    func transferData(){
    do {
        let dataArray = ["somedata": array2d1]
        try WCSession.defaultSession().updateApplicationContext(dataArray)
        let dataArray1 = ["somedata1": array2d2]
        try WCSession.defaultSession().updateApplicationContext(dataArray1)
        let dataArray2 = ["somedata2": array2d3]
        try WCSession.defaultSession().updateApplicationContext(dataArray2)
            let dataArray3 = ["somedata3": array2d4]
        try WCSession.defaultSession().updateApplicationContext(dataArray3)

// and up to 12
        }

    catch {
        print("Something wrong happened")
    }
    }

そして、これはwatchKitアプリ用です

アプリ デリゲート

func applicationDidFinishLaunching() {
    if(WCSession.isSupported()){
        self.session = WCSession.defaultSession()
        self.session.delegate = self
        self.session.activateSession()
    }
}

func applicationDidBecomeActive() {
    if(WCSession.isSupported()){
        self.session.sendMessage(["b":"peek"], replyHandler: nil, errorHandler: nil)
    }

InterfaceController (awakeWithContext)

if(WCSession.defaultSession().reachable){
    self.session.sendMessage(["b":"peek"], replyHandler: nil, errorHandler: nil)
}

ApplicationContext データの受け取り方法

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {

    dispatch_async(dispatch_get_main_queue()) { () -> Void in

        if let retrievedArray1 = applicationContext["somedata"] as? [[String]] {
                self.watchAppArray = retrievedArray1

        }
        if let retrievedArray2 = applicationContext["somedata2"] as? [[String]] {

             self.watchAppArray = retrievedArray1

// and so on for 12 arrays sent from phone

        }

        }
    }}

状況を一掃するためのアドバイスは大歓迎です!

ありがとうございました。

4

1 に答える 1