質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

0回答

2045閲覧

HealthKitを使用したアプリの作成について

.koji

総合スコア12

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2019/08/25 11:19

編集2022/01/12 10:55

前提・実現したいこと

HealthKit HKStatisticsCollectionQuery を使って
collectionViewCellに歩数を毎日分表示したい

発生している問題・エラーメッセージ

一通りHealthKitの設定をし
cellに現在の日にちまでのデータを取得したいのですがなかなかうまくいかず困ってます

エラーメッセージ

該当のソースコード

import UIKit import HealthKit class ViewController: UIViewController { let myHealthKitStore = HKHealthStore() @IBAction func ninsyou(_ sender: Any) { requestAuthorization() } @IBOutlet weak var collectionView: UICollectionView! struct HealthData { var date: Date var step: Int var distance: Int init(_ date: Date, _ step: Int, _ distance: Int) { self.date = date self.step = step self.distance = distance } } func requestAuthorization() { /*(toShare typesToShare: Set<HKSampleType>?, read typesToRead: Set<HKObjectType>?, completion: @escaping (Bool, Error?) -> Void)*/ // 読み込みを許可する型. 誕生日と性別・血液型を読み込み、体重と体温を書き込めるようにしたい認証 let typeOfRead = Set(arrayLiteral: // HKObjectType.characteristicType(forIdentifier: HKCharacteristicTypeIdentifier.dateOfBirth)!,//誕生日 // HKObjectType.characteristicType(forIdentifier: HKCharacteristicTypeIdentifier.biologicalSex)!,//性別 // HKObjectType.characteristicType(forIdentifier: HKCharacteristicTypeIdentifier.bloodType)!,//血液型 HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)!,//歩数 HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceWalkingRunning)!//歩行または走行距離 ) // 書き込みを許可する型. let typeOfWrite = Set(arrayLiteral: // HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bodyMass)!,//体重 // HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bodyTemperature)!,//体温 HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)!,//歩数 HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceWalkingRunning)!//歩行または走行距離 ) // HealthStoreへのアクセス承認をおこなう. myHealthKitStore.requestAuthorization(toShare: typeOfWrite, read: typeOfRead, completion: { (success, error) in if let e = error { print("Error: (e.localizedDescription)") return } print(success ? "success" : " Failure!") }) } var dataSource: [HealthData] = [] override func viewDidLoad() { super.viewDidLoad() //cellのxibの読み込み collectionView.dataSource = self let nib = UINib(nibName: "CollectionViewCell", bundle: nil) self.collectionView.register(nib, forCellWithReuseIdentifier: "cell") } func requestStatisticsCollection(){ let calender = Calendar.current let day = -7 let now = NSDate() let today = calender.startOfDay(for: now as Date) let endDate = now let startDate = calender.date(byAdding: Calendar.Component.day, value: day, to: today) let anchorDate = today var interval = DateComponents() interval.hour = 1 let predicate = HKQuery.predicateForSamples(withStart: startDate, end: endDate as Date, options: []) let quantityType = HKSampleType.quantityType(forIdentifier: .stepCount)! let statsOptions: HKStatisticsOptions = [HKStatisticsOptions.separateBySource,HKStatisticsOptions.cumulativeSum] let query = HKStatisticsCollectionQuery(quantityType: quantityType, quantitySamplePredicate: predicate, options: statsOptions, anchorDate: anchorDate, intervalComponents: interval ) print("(String(describing: startDate))) - (endDate)") print("anchorDate: (anchorDate)") query.initialResultsHandler = { (query, results, error) in if let result = results { DispatchQueue.main.async { self.dataSource = [] for item in result.statistics() { let data = HealthData(item.startDate, Int(item.sumQuantity()!.doubleValue(for: HKUnit.count())), 0) print("(item.startDate) - (item.endDate) (item.sumQuantity()!.doubleValue(for: HKUnit.count()))") self.dataSource.append(data) } self.collectionView.reloadData() } } self.myHealthKitStore.execute(query) } } } // cellの設定 extension ViewController: UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return self.dataSource.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let data = self.dataSource[indexPath.row] let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell let formatter: DateFormatter = DateFormatter() formatter.locale = NSLocale(localeIdentifier: NSLocale.Key.languageCode.rawValue) as Locale? formatter.dateStyle = .full formatter.doesRelativeDateFormatting = true formatter.locale = Locale(identifier: "ja_JP") cell.label.text = formatter.string(from: data.date ) cell.hosuu.text = "(data.step)" // cell.kyori.text = "(String(describing: Data.distance))" return cell } }

試したこと

データの橋渡しがうまくいっていないのか
cellの自動生成までビルドできません

補足情報(FW/ツールのバージョンなど)

どなたかお力をいただければと思います

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hameji

2019/08/25 13:02

コードは<code>というボタンを押して、 その上下を```で囲むようにしてください。 あと、まずは、dummyDataを用い、collectionViewへの表示がきちんとできるか、 それができれば、HealthKitでデータを取得するの2つに切り分けた方がいいと思います。
.koji

2019/08/25 14:47

回答ありがとうございます! もう一度切り分けてやってみます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問