トップ «前の日記(2016-12-24) 最新 次の日記(2017-01-23)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|

2017-01-22 [iOS]CloudKitを使う

Hackdrライダーにも悩みがある。

燃料計がない単車に乗っているのだが、給油時にトリップメータの値(走行距離)と消費量(給油量)から燃費を計算しないといけない。先ずは、フューエルタンクの容量を把握すること。そして、トリップメータの値から残量を予測し、給油のタイミングを判断することになる。

メーカーから、これの為のアプリが提供されているのだが、WebViewを使った手抜きで、使いづらい。なので、自作することにした。

記録データはサーバ上に置きたいが、自分で立てるのは避けたい。調べたら、iCloud関連が良さそうだ。

iCloud

利用できるストレージの種類は以下のとおり。

  • キー値ストレージ
    UserDefaultsと同様
  • ドキュメントストレージ
    文書ファイル
  • CoreDataストレージ
    ←廃止
  • CloudKit
    他ユーザと共有できるデータ

CloudKitを利用することにする。

XcodeのCapabilitiesでCloudKitを有効に設定。

Capabilities

CloudKit Dashboardで形式を定義する。

Dashboard

仮の追加コードを用意して見た。

@IBAction func add(sender: UIButton) {
    let privateDatabase : CKDatabase = CKContainer.default().privateCloudDatabase
    let refuelRecord: CKRecord = CKRecord(recordType: "Refuels")
    refuelRecord["Identifier"] = NSUUID().uuidString as CKRecordValue?
    privateDatabase.save(refuelRecord) {
        record, error in
        if error == nil {
            print("Saved : \(record)")
        } else {
            print("Error : \(error)")
        }
    }
}

追加した内容を確認するコードだ。

@IBAction func search(sender: UIButton) {
    let privateDatabase : CKDatabase = CKContainer.default().privateCloudDatabase
    let predicate = NSPredicate(format: "Identifier != %@", "nil")
    let query : CKQuery = CKQuery(recordType: "Refuels", predicate: predicate)
    privateDatabase.perform(query, inZoneWith: nil, completionHandler: {
        results, error in
        print("\(results)")
    })
}

_ ソースコード

GitHubからどうぞ。
https://github.com/murakami/MotorcycleNotebook - GitHub

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)

トップ «前の日記(2016-12-24) 最新 次の日記(2017-01-23)» 編集