- 更新日: 2015年7月6日
- Swift & iOS
CoreDataでcreated_at/updated_atの日付データを自動作成
Ruby on Rails の ActiveRecord と migration 機能を使いますと、デフォルトでデータベースのテーブルに created_at, updated_at のカラムが追加されます。さらに ActiveRecord オブジェクトを通してレコードを作成しますと、それらの created_at, updated_at カラムの日付データが自動的に作成されます。これと同じような機能を Swift & CoreData(MagicalRecord)による開発でも実現したかった。
— 環境 —
Swift 1.2
Xcode 6.3.2
NSManagedObject の awakeFromInsert() をオーバーライド
Profile モデル(エンティティ)に、created_at, updated_at の属性を作成済みの前提です。
NSManagedObject の awakeFromInsert() をオーバーライドすることで、CoreData モデル属性の初期値を設定することができます。
Profile.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import Foundation import CoreData @objc(Profile) class Profile: NSManagedObject { @NSManaged var name: String @NSManaged var created_at: NSDate @NSManaged var updated_at: NSDate override func awakeFromInsert() { super.awakeFromInsert() let dateNow = NSDate() self.created_at = dateNow self.updated_at = dateNow } } |
これで上手く動作しまして、Profile モデルのオブジェクト作成時に created_at および updated_at に現在の日時が初期値として設定されます。以下のエントリー等を参考にしました。
CoreData の 属性に現在時刻など固定値以外のデフォルト値を設定する – 24/7 twenty-four seven
Cocoa – Core Dataのエンティティ生成時に自動的に項目を登録 – Qiita
レコード更新時の updated_at の自動更新について
ActiveRecord の場合ですと、オブジェクト(DBレコード)の更新時に updated_at カラムを自動更新する機能もあるのですけど、今回はこちらについては必要なさそうだったので深追いしませんでした。
NSManagedObject に awakeFromUpdate() のメソッドが用意してあれば、以下のようにオーバーライドして簡単に実現できそうなのですけどね…。あいにく awakeFromUpdate() なるものは用意されていないようです。
1 2 3 4 5 |
override func awakeFromUpdate() { super.awakeFromUpdate() let dateNow = NSDate() self.updated_at = dateNow } |
updated_at 自動更新の機能を実装するとしたら、CoreData(または MagicalRecord)のオブジェクトを更新して保存する既存メソッドの処理の前に、オブジェクトの updated_at を現在日時に変更する処理を追加する形になるかと思います。別メソッドとして定義して更新時にそれを使うようにするか、可能であれば既存メソッドをオーバーライドするか。詳しくは調べていません。
- Swift & iOS の関連記事
- WKWebView/UIWebViewでウェブページが真っ白
- Unityのインストールと初期設定
- WKWebView/UIWebViewでNavigation Barの下にウェブページが隠れるのを回避
- SwiftでArray(配列)などをシャッフル
- Navigation Controllerで画面遷移させるSwiftコード
- Swiftでタップ/スワイプのイベント処理実装・UITapGestureRecognizerとUISwipeGestureRecognizer
- UIPageViewController画面下部のUIPageControlを非表示にする
- Swiftのバージョン確認・REPL実行
- Xcode7.0アップデートで遭遇した課題2つ
- 正規のXcodeかどうかチェック(XcodeGhostマルウェア騒動)
Leave Your Message!