2017年2月18日土曜日

Swift2 で MagicalRecord を使う方法

概要

Swift2 で Coredata を簡単に操作することができる MagicalRecord の使い方を紹介します

環境

  • Mac OS X 10.11.5
  • Xcode 7.3.1
  • Swift 2.2
  • MagicalRecord 2.3.2

ライブラリのインストール

Cocoapods を使います
以下のように Podfile に追記します

target 'gateway' do
  pod "MagicalRecord"
end
  • pod install

でインストールしてください

Entity の作成

Entity はいわゆるテーブルになります

xcdatamodeld ファイルを選択します
try_magicalrecord_select_xcdatamodeld.png

Add Entity を選択します
新規で追加された Entity を好きな名前に変更します
try_magicalrecord_add_entity.png

Attribute の追加

Attribute はいわゆるカラムになります

「+」を選択して新規で Attribute を追加します
名前とタイプを好きな値に設定します
try_magicalrecord_add_attribute.png

好きな数だけ Attribute を追加してください

Model ファイルの作成

File -> New -> File からモデルファイルの作成を行います
try_magicalrecord_add_new_file.png

iOS -> Core Data -> NSManagedObject subclass を選択して Next を選択します
try_magicalrecord_add_subclass.png

対象のプロジェクトを選択します
try_magicalrecord_select_dir.png

モデルファイルを作成する Entity を選択します
先ほど作成した Entity を選択してください
try_magicalrecord_select_entity.png

ファイルの保存先を選択します
言語は Swift を選択します
問題なければ「Create」を選択します
try_magicalrecord_create_model_file.png

「BLE+CoreDataProperties.swift」と「BLE.swift」という 2 つのファイルが作成されていることを確認してください

操作

ここまでできたらあとは各種 ViewController 内で利用するだけです

全データ取得

指定したクラスの配列が返ってきます

func searchBLE() {
    let bles = BLE.MR_findAll() as! [BLE]
    for ble in bles {
        print(ble.id)
        print(ble.peripheral_uuid)
        print(ble.service_uuid)
        print(ble.chracteristic_uuid)
    }
}

キーを指定して取得

指定したクラスの配列が返ってきます
対象のデータが 1 つでも配列になります

func searchBLE(id) {
     let bles = BLE.MR_findByAttribute("id", withValue: id) as! [BLE]
     print(bles[0].name)
}

データの保存

各種フィールドにデータを設定して saveToPersistentStoreAndWait をコールします

func registBLE() {
    let ble = BLE.MR_createEntity()
    ble?.id = NSUUID().UUIDString
    ble?.peripheral_uuid = ""
    ble?.service_uuid = ""
    ble?.chracteristic_uuid = ""
    ble?.managedObjectContext?.MR_saveToPersistentStoreAndWait()
}

データの削除

削除でも saveToPersistentStoreAndWait をコール必要があります

func deleteBLE(ble: BLE) {
    ble.MR_deleteEntity()
    ble.managedObjectContext?.MR_saveToPersistentStoreAndWait()
}

最後に

一度使い方を覚えたら結構簡単です
登録したデータの中身を print 以外で確認する方法ってあるのかな
Xcode 上とかで確認できるとデバッグとかやりやすそう

2 件のコメント:

  1. Swift3 (xccode8) の場合 NSManagedObject subclass は Editor -> Create NSManagedObject Subclass から作成するようになっています

    返信削除
  2. また手順として AppDelete.swift に

    import MagicalRecord

    とデータベースを初期化する

    MagicalRecord.setupCoreDataStack(withAutoMigratingSqliteStoreNamed: "db.sqlite")

    が抜けているので設定してください
    下は didFinishLaunchingWithOptions 内に記載すれば OK です

    返信削除