【SugarRecord】Swiftで簡単にCoreData操作！


![Slogan.png](https://qiita-image-store.s3.amazonaws.com/0/41892/4686ad1f-6694-2f8b-5010-37e04f950d40.png "Slogan.png")

[SugarRecord/SugarRecord](https://github.com/SugarRecord/SugarRecord)
SwiftでCoreDataを操作できるライブラリです。
Objective-CのMagicalRecordのようなものになっています。


# 環境
Xcode6.3
swift1.2
SugarRecord1.0.7


# セットアップ手順

## Project作成

Project作成時に、
下記のように「Use Core Data」にチェックを入れます。

![スクリーンショット_2015-04-29_午後3_42_23.png](https://qiita-image-store.s3.amazonaws.com/0/41892/9ae02712-4dc3-c3b2-2f81-8cc733f3c954.png "スクリーンショット_2015-04-29_午後3_42_23.png")

## インストール方法
CocoaPodでインストールします。

Podfileに下記を追記

```Podfile
pod 'SugarRecord/CoreData', :git => 'https://github.com/SugarRecord/SugarRecord.git'
use_frameworks!
```

```
pod install
```

## Import
利用するファイルでimportします。

```
import SugarRecord
```

## SugarRecord初期化

AppDelegateで下記を追記。
`"Database.sqlite"`部分は任意のDB名を付ける。

```swift:AppDelegate.swift
let stack: DefaultCDStack = DefaultCDStack(databaseName: "Database.sqlite", automigrating: true)
SugarRecord.addStack(stack)
```
# Entity作成

## Entity追加

「Add Entity」からEntityを追加。

![スクリーンショット_2015-04-29_午後3_48_24.png](https://qiita-image-store.s3.amazonaws.com/0/41892/7ece389d-cee3-39ca-2d71-44ca43dd929f.png "スクリーンショット_2015-04-29_午後3_48_24.png")

## カラムの作成

Attributesから追加したいカラムを追加。

![スクリーンショット_2015-04-29_午後3_49_04.png](https://qiita-image-store.s3.amazonaws.com/0/41892/c79d7a75-d3f1-3fa1-7139-7a4fcbad4f61.png "スクリーンショット_2015-04-29_午後3_49_04.png")

## Modelのクラスを作成

[Editor]->[Create NSManagedObject Subclass...]からクラスを追加。

![スクリーンショット 2015-04-29 午後3.49.09.png](https://qiita-image-store.s3.amazonaws.com/0/41892/d16db6bb-72e7-ec91-fc94-7e7f2d8ba66d.png "スクリーンショット 2015-04-29 午後3.49.09.png")

順番にNextを押して進んでいき、
下記の画面で、Groupにプロジェクト名のフォルダを指定して保存します。

![スクリーンショット_2015-04-29_午後3_49_27.png](https://qiita-image-store.s3.amazonaws.com/0/41892/fe46d2d3-ae50-8322-9a1c-f7d68f7cf737.png "スクリーンショット_2015-04-29_午後3_49_27.png")


下記のような[Entity名].swiftのファイルが作成される。

![スクリーンショット 2015-04-29 午後4.29.59.png](https://qiita-image-store.s3.amazonaws.com/0/41892/77755c1e-b300-9f03-8da2-3f36d9b1200e.png "スクリーンショット 2015-04-29 午後4.29.59.png")



次に、「プロジェクト名.xcdatamodeld」内
[Configurations]の「Class」の名前を変更する。

```変更前
「PRODUCT_MODULE_NAME.[Entity名]」
```
```変更後
「プロジェクト名」.[Entity名]」
```

![スクリーンショット_2015-04-29_午後3_51_30.png](https://qiita-image-store.s3.amazonaws.com/0/41892/495edead-7889-93be-925d-e25eb7efb7fa.png "スクリーンショット_2015-04-29_午後3_51_30.png")


# データ操作方法

## 保存

Userに`age=24`、`name="Hirai"`のレコードを保存

```swift
var user: User = User.create() as! User
        user.age = 24
        user.name = "Hirai"
        let saved: Bool = user.save()
```

## 検索

`name="Hirai"`のレコードを検索

```swift
let user: User = User.by("name", equalTo: "Hirai").find().firstObject() as? User
println(user)
```

```出力
data: {
    age = 24;
    name = Hirai;
})
```

## 更新

データの変更、削除にはTransactionを使用します。
`user.beginWriting()`
`user.endWriting()`

```swift
var user: User = User.by("name", equalTo: "Hirai").find().firstObject() as? User
user.beginWriting()
user.name = "Araki"
user.age = 22
user.endWriting()
let saved: Bool = user.save()
```

## 削除

削除は
①分けて書く
②繋げて書く
の２つの書き方があります。

```swift
// パターン①
user.beginWriting()
user.delete()
user.endWriting()

//  パターン②
user.beginWriting().delete().endWriting()
```

# 最後に

導入方法から基本的な機能まで紹介しましたが、
そのほかにも詳しい検索などいろいろな機能があります。

詳しくは下記を御覧ください。

[SugarRecord/SugarRecord](https://github.com/SugarRecord/SugarRecord/wiki/Operations)