ちょっと厨二っぽいSEのブログ

プログラミングとかのシステム備忘録など

【Swift1.2】 単純なファイルの読み込みから、CSVデータによるCoreDataの初期化まで【MagicalRecord】

こちらの記事はSwift1.2版です
Swift2.0のコードはこちらにあります
ryokwkm2.hatenadiary.jp


今回の記事では、3つのことを行います

◆1.テキストファイルを読み込み、一行ずつ出力
◆2.CSVファイルを読み込み、カンマ区切りでデータを取得(出力)
◆3.CSVデータでCoreDataのデータを初期化。(MagicalRecordを使用)

今回やりたかったのは、CoreDataの初期化です
アプリインストール時、DBに初期データを挿入したかったのですが
CSVデータから挿入がスムーズだろうということで、このようなことを調べました。

MagicalRecordとは、CoreDataを手軽扱えるライブラリです
今回はMagicalRecordを使用してDB操作をしています

ステップを踏んで説明していきます



◆1.テキストファイルを読み込み、一行ずつ出力

Memo.csvというテキストファイルを読み込み、それを出力します

let filePath = NSBundle.mainBundle().pathForResource("Memo", ofType: "csv")

let data = NSString(contentsOfFile: filePath!, encoding: NSUTF8StringEncoding, error: nil) as! String
data.enumerateLines{(line, stop) -> () in
  println(line)
}


◆2.CSVファイルを読み込み、カンマ区切りでデータを取得(出力)

Memo.csvというcsvファイルを読み込み、それを出力します
(配列への格納までです)
ちなみに中身はこんなデータです

memo1, メモ1です
memo2, メモ2です
memo3,
memo4,
let filePath = NSBundle.mainBundle().pathForResource("Memo", ofType: "csv")

let data = NSString(contentsOfFile: filePath!, encoding: NSUTF8StringEncoding, error: nil) as! String
data.enumerateLines{(line, stop) -> () in
  //カンマ区切りで出力(配列に格納まで)
  let item:[String] = split(line) {
    $0 == ","
  }
  println( item )
}


◆3.CSVデータでCoreDataのデータを初期化。(MagicalRecordを使用)

Memoテーブル
//構造は title:String, value:String
CSVデータで初期化します

はじめにテーブルの中身を見て、空の場合にデータを挿入しています


//Memoテーブルに保存。
//構造は title:String,  value:String  
var memos:[Memo]! = Memo.MR_findAll() as! [Memo]

if let first = memos?.first {
	//データが存在した場合は初期化しない
} else {
	//データ取得できなかった場合、初期データ挿入
	let filePath = NSBundle.mainBundle().pathForResource("Memo", ofType: "csv")
	
	let data = NSString(contentsOfFile: filePath!, encoding: NSUTF8StringEncoding, error: nil) as! String
	data.enumerateLines{(line, stop) -> () in
		let item:[String] = split(line) {
			$0 == ","
		}
		
		var newRecord:Memo = Memo.MR_createEntity() as! Memo
		newRecord.title = item[0]
		if item.count > 1  {
			newRecord.value = item[1]
		} else {
			newRecord.value = ""
		}
		newRecord.managedObjectContext!.MR_saveToPersistentStoreAndWait()
	}
}	
	
}


まとめたもの
ファイルを読み込む · GitHub