2016-08-29 5 views
1

このメソッドはシミュレータで呼び出されましたが、実際の時計デバイスで呼び出されることはありません。リンゴのシンプルなコードと私のテストの両方。watchOS3 handle(_ backgroundTasks:Set <WKRefreshBackgroundTask>)が呼び出されました

私は自分の間違いやAppleのことを知りたいと思っています。

私のコード -

class InterfaceController: WKInterfaceController, WKExtensionDelegate { 


    @IBOutlet var textLbl: WKInterfaceLabel! 

    override func awake(withContext context: Any?) { 
     super.awake(withContext: context) 

     WKExtension.shared().delegate = self 

     // Configure interface objects here. 
    } 

    func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) { 
     for task : WKRefreshBackgroundTask in backgroundTasks { 
      if task is WKSnapshotRefreshBackgroundTask { 
       textLbl.setText("hahahah"); 
       task.setTaskCompleted() 
      } 
     } 
    } 
} 
+0

私はまったく同じ問題を抱えています - 'handle(_ :)'は手動でタスクをスケジュールするか、WatchConnectivityアップデートを起動するかどうかに関係なく、シミュレータで確実に動作します。レーダー時... :-( –

答えて

0

scheduledCompletion属性をクロージャではなく「実際の」関数に指定することで回避策を見つけることができました。

WKExtension.shared().scheduleBackgroundRefresh(
        withPreferredDate: nextRefreshTime!, 
        userInfo: nil, 
        scheduledCompletion: self.backgroundRefreshRunning) 
... 

private func backgroundRefreshRunning(error: Error?) { 
    if (error != nil) { 
     print("Error running background task: \(error.debugDescription)") 
    } 
} 

これでうまくいくようです。

Swift 3コンパイラにはバグがあります。私はSwift 2.3からSwift 3にコードを更新するまで正常に動作したscheduledCompletion値のインラインクロージャーを使用していました。

2

Appleの公式のコード例、WatchBackgroundRefresh、またwatchOS 3.0(14S326)上と同じように失敗しました。以前の3.0ベータ版でも動作していましたが、私自身のコードでも同じエラーが発生しました。

もう1つの症状は、handle(...)へのスナップショットの更新、つまりWKSnapshotRefreshBackgroundTaskタスクの呼び出しがないことです。

私はOpenRaderに上場されているアップルのバグレポートを、提出されました: http://www.openradar.me/radar?id=6720257230110720

最後に、私はアップルの株式のアプリがバックグラウンドの更新を取得するんだろう。だから私はなぜ他のアプリが失敗する間にうまくいくのか分からない。

+0

私は今このレーダーを欺くよ... –

関連する問題