LoginSignup
26
26

More than 5 years have passed since last update.

SugarRecordでSwiftからCoreDataをお手軽に使う

Last updated at Posted at 2015-04-27

iOSでデータを永続化する方法としてCoreDataがありますが、コード量が多く面倒に感じる人も多いかと思います。

ここではより簡単にCoreDataを使うためにSugarRecordという便利なフレームワークを導入し、SwiftからCoreDataを使ってみます。Objective-CのMagicalRecordのような位置付けのフレームワークです。

環境

  • SugarRecord 1.0.7
  • Swift 1.2
  • Xcode 6.3
  • iOS 8.3
  • CocoaPods 0.36.3

インストール

CocoaPodsを使います。

  1. Podfileに以下を追記します。

    pod 'SugarRecord/CoreData', :git => 'https://github.com/SugarRecord/SugarRecord.git'
    
  2. インストールします。

    pod install
    

初期化処理

AppDelegate.Swiftapplicationに以下を追加します。

let stack: DefaultCDStack = DefaultCDStack(databaseName: "database.sqlite", automigrating: true)
stack.autoSaving = true
SugarRecord.addStack(stack)

//ログレベルを設定(任意)
SugarRecordLogger.currentLevel = .logLevelError
  • DBとしてiOS標準のSQLiteだけでなく3rdパーティのRealmも利用可能です。

モデル作成

  1. File -> New -> File -> iOS -> Data ModelでModel.xcdatamodeldを作成して選択します。

  2. Add EntityでEntityを作成しAttributesにAttributeと型を設定します。

  3. Editor -> Create NSManagedObject Subclassを選択してEntityのクラスを作成します。

  4. ConfigurationsのClass欄を以下のように修正します。

    変更前

    PRODUCT_MODULE_NAME.[Entity名]
    

    変更後

    [プロジェクトのtarget名].[Entity名]
    

操作

例として以下のようなモデルのクラスを想定します。画像をCoreDataに保存する例です。

class Icon: NSManagedObject {
    @NSManaged var url: String
    @NSManaged var image: NSData
}

保存

if let icon:Icon = Icon.create() as? Icon {
    icon.url = "http://example.com/1.png"
    icon.image = image
    icon.save()
}

クエリ

if let icon: Icon = Icon.by("url", equalTo: url).find().firstObject() as? Icon {
    imageView.image = UIImage(data:icon.image)
}

カウント

let num:Int = Icon.count()

アップデート

if let icon: Icon = Icon.by("url", equalTo: url).find().firstObject() as? Icon {
    icon.beginWriting()
    icon.image = new_image
    icon.endWriting()
}

参考

詳細はGitHubの公式ドキュメントに記載されています。

26
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
26