アプリを作ると大抵の場合は必須の機能となるのがデータの保存。
データの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) {
 let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
 let myContext: NSManagedObjectContext = appDel.managedObjectContext!
 let myEntity: NSEntityDescription! = NSEntityDescription.entityForName("Entity", inManagedObjectContext: myContext)
// オブジェクトを新規作成
 var newData = Entity(entity: myEntity, insertIntoManagedObjectContext: myContext)
 newData.displayOrder = order
 newData.memo = memo
// 作成したオブジェクトを保存
 var error: NSError? = nil
 if !myContext.save(&error) {
 NSLog("writeMemoData err![\(error)]")
 abort()
}
}
5.CoreDataからレコードの読み込み
CoreDataから読み込んだデータを配列に格納し直して、dispayOrderの順番でソートします。
func readMemoData() {
 let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
 let myContext: NSManagedObjectContext = appDel.managedObjectContext!
 let myRequest: NSFetchRequest = NSFetchRequest(entityName: "Entity")
 myRequest.returnsObjectsAsFaults = false
 var myResults: NSArray! = myContext.executeFetchRequest(myRequest, error: nil)
// 配列を初期化して格納する
 myItems = []
 for myData in myResults {
 myItems.addObject(myData)
}
// displayOrderの順番で表示
 let sort_descriptor:NSSortDescriptor = NSSortDescriptor(key:"displayOrder", ascending:true)
 myItems.sortUsingDescriptors([sort_descriptor])
}
6.CoreDataのレコードを更新
編集した配列の番号をと編集内容を引数で受け取り、Entityを更新します。
func updateMemoData(editRow: Int, memo: String) {
 let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
 let myContext: NSManagedObjectContext = appDel.managedObjectContext!
 var editData = myItems[editRow] as! ComicMemo.Entity
 editData.memo = memo
// 作成したオブジェクトを保存
 var error: NSError? = nil
 if !myContext.save(&error) {
 NSLog("updateMemoData err![\(error)]")
 abort()
}
}
7.CoreDataのレコードの削除
引数で受け取ったデータをdeleteObjectメソッドを使用して削除します。
func deleteMemoData(object: NSManagedObject) {
// CoreDataの読み込み処理
 let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
 let myContext: NSManagedObjectContext = appDel.managedObjectContext!
 myContext.deleteObject(object)
// 作成したオブジェクトを保存
 var error: NSError? = nil
 if !myContext.save(&error) {
 NSLog("deleteMemoData err![\(error)]")
 abort()
}
}
以上でCoreDataに対して、追加、読込、更新、削除が出来るようになりました。
CoreDataを使ったアプリ公開していますので使ってやってください。

巻数メモ
データの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) {
 let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
 let myContext: NSManagedObjectContext = appDel.managedObjectContext!
 let myEntity: NSEntityDescription! = NSEntityDescription.entityForName("Entity", inManagedObjectContext: myContext)
// オブジェクトを新規作成
 var newData = Entity(entity: myEntity, insertIntoManagedObjectContext: myContext)
 newData.displayOrder = order
 newData.memo = memo
// 作成したオブジェクトを保存
 var error: NSError? = nil
 if !myContext.save(&error) {
 NSLog("writeMemoData err![\(error)]")
 abort()
}
}
5.CoreDataからレコードの読み込み
CoreDataから読み込んだデータを配列に格納し直して、dispayOrderの順番でソートします。
func readMemoData() {
 let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
 let myContext: NSManagedObjectContext = appDel.managedObjectContext!
 let myRequest: NSFetchRequest = NSFetchRequest(entityName: "Entity")
 myRequest.returnsObjectsAsFaults = false
 var myResults: NSArray! = myContext.executeFetchRequest(myRequest, error: nil)
// 配列を初期化して格納する
 myItems = []
 for myData in myResults {
 myItems.addObject(myData)
}
// displayOrderの順番で表示
 let sort_descriptor:NSSortDescriptor = NSSortDescriptor(key:"displayOrder", ascending:true)
 myItems.sortUsingDescriptors([sort_descriptor])
}
6.CoreDataのレコードを更新
編集した配列の番号をと編集内容を引数で受け取り、Entityを更新します。
func updateMemoData(editRow: Int, memo: String) {
 let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
 let myContext: NSManagedObjectContext = appDel.managedObjectContext!
 var editData = myItems[editRow] as! ComicMemo.Entity
 editData.memo = memo
// 作成したオブジェクトを保存
 var error: NSError? = nil
 if !myContext.save(&error) {
 NSLog("updateMemoData err![\(error)]")
 abort()
}
}
7.CoreDataのレコードの削除
引数で受け取ったデータをdeleteObjectメソッドを使用して削除します。
func deleteMemoData(object: NSManagedObject) {
// CoreDataの読み込み処理
 let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
 let myContext: NSManagedObjectContext = appDel.managedObjectContext!
 myContext.deleteObject(object)
// 作成したオブジェクトを保存
 var error: NSError? = nil
 if !myContext.save(&error) {
 NSLog("deleteMemoData err![\(error)]")
 abort()
}
}
以上でCoreDataに対して、追加、読込、更新、削除が出来るようになりました。
CoreDataを使ったアプリ公開していますので使ってやってください。

巻数メモ