【iOSアプリ開発!】- swift2 – 実装編 : CoreDataへのデータの保存、読み込み、更新、削除

前回の記事でCoreDataを扱う準備ができました。

【iOSアプリ開発!】- swift2 – 準備編 : CoreDataへのデータの保存、読み込み、更新、削除

次に、早速、CoreDataへのデータの保存、読み込み、更新、削除などを説明していきます。

1,データの保存

(1)appDelegateのインスタンスを生成し、NSMangedObjectContextを取得。
(2)Entity名を指定して、NSEntityDescriptionによりEntityのインスタンスを取得
(3)EntityのAttributeを指定して、データをセット
(4)セットした値を保存

<br />
func writeData(){<br />
        let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate<br />
        let myContext: NSManagedObjectContext = appDelegate.managedObjectContext</p>
<p>        let myEntity: NSEntityDescription! = NSEntityDescription.entityForName(&quot;Model&quot;, inManagedObjectContext: myContext)</p>
<p>        let newData = Model(entity: myEntity, insertIntoManagedObjectContext: myContext)<br />
        newData.someDataA = &quot;amazarashi&quot;<br />
        newData.someDataB = 100<br />
        appDelegate.saveContext()<br />
    }<br />

2、データのロード(読み込み)

(1)appDelegateのインスタンスを生成し、NSMangedObjectContextを取得。
(2)Entity名を指定して、NSFetchRequstを生成
(3)swift2からは、do{ }catch{}構文でNSFetchRequstを実行し、格納データを取得。
(4)for で格納値を取り出す。

<br />
func loadData(){<br />
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate<br />
        let managedContext = appDelegate.managedObjectContext</p>
<p>        let request = NSFetchRequest(entityName: &quot;Model&quot;)<br />
        request.returnsObjectsAsFaults = false</p>
<p>        do {<br />
            let results = try managedContext.executeFetchRequest(request) as! [Model]<br />
            resultDatas = results<br />
        } catch let error as NSError {<br />
            print(&quot;Could not fetch \(error), \(error.userInfo)&quot;)<br />
        }<br />
        print(resultDatas.count)<br />
        for result in resultDatas{<br />
            print(result.someDataA)<br />
            print(result.someDataB)<br />
        }<br />
    }<br />

3、データの更新

(1)appDelegateのインスタンスを生成し、NSMangedObjectContextを取得。
(2)Entity名を指定して、NSFetchRequstを生成
(3)NSFetchRequstに更新対象の条件を設定(今回はsomeDataBの値が100のデータ)
(4)do{ }catch{}構文でNSFetchRequstを実行し、格納データを取得。
(5)取得した更新対象データのsomeDataAの値を”arehamahoudarouka”に設定
(6)更新結果を保存する。

<br />
func updateData(){<br />
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate<br />
        let managedContext = appDelegate.managedObjectContext</p>
<p>        let request = NSFetchRequest(entityName: &quot;Model&quot;)<br />
        //条件設定<br />
        let predicate = NSPredicate(format: &quot;someDataB = %d&quot;,100)<br />
        //リクエストに条件付加<br />
        request.predicate = predicate</p>
<p>        request.returnsObjectsAsFaults = false</p>
<p>        do {<br />
            let results = try managedContext.executeFetchRequest(request) as! [Model]<br />
            resultDatas = results<br />
        } catch let error as NSError {<br />
            print(&quot;Could not fetch \(error), \(error.userInfo)&quot;)<br />
        }</p>
<p>        for result in resultDatas{<br />
            result.someDataA = &quot;arehamahoudarouka&quot;<br />
        }</p>
<p>        appDelegate.saveContext()</p>
<p>    }<br />

4、データの削除

(1)appDelegateのインスタンスを生成し、NSMangedObjectContextを取得。
(2)Entity名を指定して、NSFetchRequstを生成
(3)NSFetchRequstに削除対象の条件を設定(今回はsomeDataBの値が100のデータ)
(4)do{ }catch{}構文でNSFetchRequstを実行し、格納データを取得。
(5)取得した削除対象データを削除
(6)削除結果を保存する。

<br />
func deleteData(){<br />
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate<br />
        let managedContext = appDelegate.managedObjectContext</p>
<p>        let request = NSFetchRequest(entityName: &quot;Model&quot;)<br />
        //条件設定<br />
        let predicate = NSPredicate(format: &quot;someDataB = %d&quot;,100)<br />
        //リクエストに条件付加<br />
        request.predicate = predicate</p>
<p>        request.returnsObjectsAsFaults = false</p>
<p>        do {<br />
            let results = try managedContext.executeFetchRequest(request) as! [Model]<br />
            resultDatas = results<br />
        } catch let error as NSError {<br />
            print(&quot;Could not fetch \(error), \(error.userInfo)&quot;)<br />
        }</p>
<p>        for data in resultDatas{<br />
            managedContext.deleteObject(data)<br />
        }</p>
<p>        print(&quot;deleted&quot;)<br />
        print(resultDatas.count)</p>
<p>        appDelegate.saveContext()<br />
    }<br />