アプリを作ると大抵の場合は必須の機能となるのがデータの保存。
データのI/Oはシリアライズ、デシリアライズをするという方法もありますが、iOSアプリを作成する場合、CoreDataという大量のデータを高速に扱う事が出来るものがあるのでその使い方を書きたいと思います。
今回はUITableViewに表示するリストを配列に格納したデータに対しての操作となります。


1.CoreDataを使うための準備
CoreDataを使う場合、プロジェクトの作成時に「Use Core Data」にチェックを入れます。


2.CoreDataに格納するEntityを用意
CoreDataを使用すると.xcdatamodelという拡張子のファイルがプロジェクトに追加されます。
そのファイルをクリックするとCoreDataに格納するデータ型の定義ができます。
今回は、以下のようにデータ型を定義しました。

displayOrder:リストに表示する順番
memo:表示する内容


3.配列の定義
変更可能な配列を定義します。
// CoreDataに保存するデータ配列
var myItems: NSMutableArray = []


4.CoreDataへの新規レコードを追加
新しくEntityを追加して、displayOrderとmemoの内容を設定して保存します。
func writeMemoData(order: Int, memo: String) {
   &nbsplet appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
   &nbsplet myContext: NSManagedObjectContext = appDel.managedObjectContext!

   &nbsplet myEntity: NSEntityDescription! = NSEntityDescription.entityForName("Entity", inManagedObjectContext: myContext)

    // オブジェクトを新規作成
   &nbspvar newData = Entity(entity: myEntity, insertIntoManagedObjectContext: myContext)
   &nbspnewData.displayOrder = order
   &nbspnewData.memo = memo

    // 作成したオブジェクトを保存
   &nbspvar error: NSError? = nil
   &nbspif !myContext.save(&error) {
       &nbspNSLog("writeMemoData err![\(error)]")
       &nbspabort()
    }
}


5.CoreDataからレコードの読み込み
CoreDataから読み込んだデータを配列に格納し直して、dispayOrderの順番でソートします。
func readMemoData() {
   &nbsplet appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
   &nbsplet myContext: NSManagedObjectContext = appDel.managedObjectContext!

   &nbsplet myRequest: NSFetchRequest = NSFetchRequest(entityName: "Entity")
   &nbspmyRequest.returnsObjectsAsFaults = false

   &nbspvar myResults: NSArray! = myContext.executeFetchRequest(myRequest, error: nil)

    // 配列を初期化して格納する
   &nbspmyItems = []
   &nbspfor myData in myResults {
       &nbspmyItems.addObject(myData)
    }

    // displayOrderの順番で表示
   &nbsplet sort_descriptor:NSSortDescriptor = NSSortDescriptor(key:"displayOrder", ascending:true)
   &nbspmyItems.sortUsingDescriptors([sort_descriptor])
}


6.CoreDataのレコードを更新
編集した配列の番号をと編集内容を引数で受け取り、Entityを更新します。
func updateMemoData(editRow: Int, memo: String) {
   &nbsplet appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
   &nbsplet myContext: NSManagedObjectContext = appDel.managedObjectContext!

   &nbspvar editData = myItems[editRow] as! ComicMemo.Entity
   &nbspeditData.memo = memo

    // 作成したオブジェクトを保存
   &nbspvar error: NSError? = nil
   &nbspif !myContext.save(&error) {
       &nbspNSLog("updateMemoData err![\(error)]")
       &nbspabort()
    }
}


7.CoreDataのレコードの削除
引数で受け取ったデータをdeleteObjectメソッドを使用して削除します。
func deleteMemoData(object: NSManagedObject) {
    // CoreDataの読み込み処理
   &nbsplet appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
   &nbsplet myContext: NSManagedObjectContext = appDel.managedObjectContext!

   &nbspmyContext.deleteObject(object)

    // 作成したオブジェクトを保存
   &nbspvar error: NSError? = nil
   &nbspif !myContext.save(&error) {
       &nbspNSLog("deleteMemoData err![\(error)]")
       &nbspabort()
    }
}

以上でCoreDataに対して、追加、読込、更新、削除が出来るようになりました。
CoreDataを使ったアプリ公開していますので使ってやってください。

巻数メモ