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

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

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

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

1,データの保存

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

func writeData(){
        let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let myContext: NSManagedObjectContext = appDelegate.managedObjectContext
        
        let myEntity: NSEntityDescription! = NSEntityDescription.entityForName("Model", inManagedObjectContext: myContext)
        
        let newData = Model(entity: myEntity, insertIntoManagedObjectContext: myContext)
        newData.someDataA = "amazarashi"
        newData.someDataB = 100        
        appDelegate.saveContext()
    }

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

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

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

3、データの更新

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

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

4、データの削除

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

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