アプリケーションをインストールして立ち上げたら、すでに入っていてほしいデーターがあります(例えば、都道府県名とか…)。
CoraData を使う
- 初めてアプリケーションを作る時であれば、CoreData のチェックボックスにチェックを入れて対応
- 追加で使う場合は、別の話
CoreData の Entities
plist ファイルを作る
- ファイルを追加
- iOS -> Resource -> Property List
追加したplistのディレクトリ
plistにデーターを登録する
- ファイルは「Masterdata.plist」
- Dictionary で登録しておく
登録してみたサンプル
plistからデーターを読み取りデーターを登録する
func initMasters() {
println("initMasters ------------")
// plist の読み込み
let path:NSString = NSBundle.mainBundle().pathForResource("Masterdata", ofType: "plist")!
var masterDataDictionary:NSDictionary = NSDictionary(contentsOfFile: path)
let app: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let categoryContext: NSManagedObjectContext = app.managedObjectContext!
for(var i = 1; i<=masterDataDictionary.count; i++) {
let index_name: String = "Category" + String(i)
var item: AnyObject = masterDataDictionary[index_name]!
println(item["name"])
let categoryEntity: NSEntityDescription! = NSEntityDescription.entityForName(
"Categories",
inManagedObjectContext: categoryContext
)
var new_data = NSManagedObject(entity: categoryEntity, insertIntoManagedObjectContext: categoryContext)
//new_data.name = item["name"] as String
new_data.setValue(item["name"] as String, forKey: "name")
var error: NSError?
categoryContext.save(&error)
}
println("------------")
}
データーがあれば実行しない
初期データーは一回登録したら、もういいのでデーターを読み取って存在しなかったら投入することにします(sqliteのファイルの有無とかもあると思うんですけれど)
override func viewDidLoad() {
super.viewDidLoad()
var results:NSArray = readData()
if(results.count == 0) {
// 初期データーの投入
initMasters()
results = readData()
}
}
全体
// ViewController.swift
// TestAppCoreDataInitApp01
import UIKit
import CoreData
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var results:NSArray = readData()
if(results.count == 0) {
// 初期データーの投入
initMasters()
results = readData()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func readData() -> NSArray{
println("readData ------------")
let app: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let categoryContext: NSManagedObjectContext = app.managedObjectContext!
let categoryRequest: NSFetchRequest = NSFetchRequest(entityName: "Categories")
var results: NSArray! = categoryContext.executeFetchRequest(categoryRequest, error: nil)
for data in results {
println("------------")
println(data.name?)
println("------------")
}
return results
}
func initMasters() {
println("initMasters ------------")
// plist の読み込み
let path:NSString = NSBundle.mainBundle().pathForResource("Masterdata", ofType: "plist")!
var masterDataDictionary:NSDictionary = NSDictionary(contentsOfFile: path)
let app: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let categoryContext: NSManagedObjectContext = app.managedObjectContext!
for(var i = 1; i<=masterDataDictionary.count; i++) {
let index_name: String = "Category" + String(i)
var item: AnyObject = masterDataDictionary[index_name]!
println(item["name"])
let categoryEntity: NSEntityDescription! = NSEntityDescription.entityForName(
"Categories",
inManagedObjectContext: categoryContext
)
var new_data = NSManagedObject(entity: categoryEntity, insertIntoManagedObjectContext: categoryContext)
//new_data.name = item["name"] as String
new_data.setValue(item["name"] as String, forKey: "name")
var error: NSError?
categoryContext.save(&error)
}
println("------------")
}
}
実行環境
- Xcode 6.0
- iOS 8