Swift에서 CoreData에 필요한 초기 데이터(마스터) 준비

설치 프로그램이 시작된 후 직접 들어가고 싶은 데이터(예를 들어 도도부현 이름 등)가 있습니다.

CoraData 사용

  • 어플리케이션을 처음 제작할 경우 CoreData 확인란에 해당
  • 을 선택합니다.
  • 추가 사용 시 기타
  • CoreData의 Enities



    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
  • 참고 자료

  • http://onot.tumblr.com/post/33772954734/coredata
  • 좋은 웹페이지 즐겨찾기