CocoaPods で MagicalRecord をインストール
Podfile に
pod "MagicalRecord"
を追加し
pod install
でインストール。
<アプリ名>-Bridging-Header.h に
#import <MagicalRecord/CoreData+MagicalRecord.h>
を記述して、Swift から MagicalRecord を使えるようにする。
なお、Bridging-Header を作る手順は先日の記事で書いた。
xcdatamodeld を作成
プロジェクト作成時に CoreData を使う選択をしていれば、 <プロジェクト名>.xcdatamodeld ファイルが作成されているので、 Xcode でエンティティを定義する。 その際、エンティティに対応する NSManagedObject サブクラスも指定。
NSManagedObject のサブクラスを作成
プロジェクトに NSManagedObject のサブクラスを追加する。 先ほど作成したエンティティに対応するクラスを Swift で生成。
import Foundation import CoreData @objc(Favorite) class Favorite: NSManagedObject { @NSManaged var login: String @NSManaged var owner: String @NSManaged var name: String @NSManaged var slug: String @NSManaged var createdAt: NSDate @NSManaged var updatedAt: NSDate @NSManaged var order: NSNumber }
CoreData スタックのセットアップ
MagicalRecord を使って CoreData を初期化するコードを AppDelegate に記述する。 Xcode が生成した CoreData 関連のひな形は削除。
import UIKit import CoreData @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // CoreData スタックを初期化 MagicalRecord.setupCoreDataStackWithStoreNamed("Bitissues.sqlite") // ...省略... return true } // ...省略... }
これで準備完了
あとは Objective-C のときと同様に MagicalRecord が使える。 試しに、NSFetchedResultsController を取得してみるコードがこちら。
import Foundation import CoreData extension Favorite { class func fetchAllWithLogin(login: String, delegate: NSFetchedResultsControllerDelegate?) -> NSFetchedResultsController { let predicate = NSPredicate(format: "login = %@", login) return Favorite.MR_fetchAllSortedBy( "order", ascending: true, withPredicate: predicate, groupBy: nil, delegate: delegate ) } }