2017-03-06 1 views
0

나는 (https://www.raywenderlich.com/89733/healthkit-tutorial-with-swift-workouts) 레이 Wenderlich에서 다운로드 스위프트 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는 레코드가 읽 t 졌음을 나타냄니다.

인증이 완료되었으며 헬스 앱에서 많은 데이터를 실행하고 있습니다.

분명히 print ("View will be appear")와 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 

이제 작동합니다.