2017-03-06 5 views
0

に実行されることはありません私は私が当惑していますレイWenderlich(https://www.raywenderlich.com/89733/healthkit-tutorial-with-swift-workouts)からダウンロードし、スウィフト3.0機能readRunningWorkOutsはスウィフト3

にソースを変換HKTutorialアウトしようとしていますWorkoutsTableViewControllerのviewWillAppearでコードの動作。

変換後viewWillAppearのマイバージョン:クラスHKManagerで

open override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    print("View will appear") 
    healthManager?.readRunningWorkOuts({ (results, error) -> Void in 
     if(error != nil) 
     { 
      print("Error reading workouts: \(error?.localizedDescription)") 
      return; 
     } 
     else 
     { 
      print("Workouts read successfully!") 
     } 
     print("Really") 
     //Kkeep workouts and refresh tableview in main thread 
     self.workouts = results as! [HKWorkout] 
     DispatchQueue.main.async(execute: {() -> Void in 
      self.tableView.reloadData() 
     }); 

     }) 
     print("viewWillAppear ends") 
    } 

    open override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    print(workouts.count) 
    return workouts.count 
    } 

及びFUNC readRunningWorkouts:

func readRunningWorkOuts(_ completion: (([AnyObject]?, NSError?) -> Void)!) { 

    print("readRunningWorkOuts") 
    // 1. Predicate to read only running workouts 
    let predicate = HKQuery.predicateForWorkouts(with: HKWorkoutActivityType.running) 
    // 2. Order the workouts by date 
    let sortDescriptor = NSSortDescriptor(key:HKSampleSortIdentifierStartDate, ascending: false) 
    // 3. Create the query 
    let sampleQuery = HKSampleQuery(sampleType: HKWorkoutType.workoutType(), predicate: predicate, limit: 0, sortDescriptors: [sortDescriptor]) 
    { (sampleQuery, results, error) -> Void in 

     if let queryError = error { 
      print("There was an error while reading the samples: \(queryError.localizedDescription)") 
     } 
     completion!(results,error as NSError?) 
    } 
    // 4. Execute the query 
    healthKitStore.execute(sampleQuery) 

} 

出力示す:

View will appear 
viewWillAppear ends 
0 
0 
0 
0 
0 

workouts.countの値in func numberOfRowsは、レコードが読み込まれていないことを示します。

認証が行われ、健康アプリで多くのデータが実行されています。

明らかに、print( "View"が表示される)とprint( "viewWillAppear ends")の間のステートメントは決して実行されません。

私は何が欠けていますか?コードは正しいですか?教えてください。ありがとうございました。

プロジェクトファイルがhttps://dl.dropboxusercontent.com/u/2400869/HKTutorialFinalCode.zip

+0

@ TusharSharmaしました。この関数は決して呼び出されません。それが呼び出された場合、最初のprint文が実行されます。 –

+0

@TusharSharma var healthManager:HealthManager? –

+0

@TusharSharma Xcodeプロジェクトファイルをダウンロードするリンクを追加しました。 –

答えて

0

でダウンロードすることができ、私はにWorkoutsTableViewController.swiftの22行を変更することで問題を解決:

var healthManager:HealthManager = HealthManager() 

そして、FUNCのviewWillAppearで行を変更:

healthManager?.readRunningWorkOut({ (results, error) -> Void in 

〜:

healthManager.readRunningWorkOut({ (results, error) -> Void in 

今、動作します。

関連する問題