【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