최초 프로젝트를 생성할 때 Use Core Data 체크박스를 선택해서 생성하면 CoreDataDemo.xcdatamodeld 라는 파일이 생성된다.



파일을 열면 아래 사진과 같은 화면이 나오는데  제일 하단의 Add Entity를 클릭하여 새로운 Entity를 생성하고 Add Attribute를 클릭하여 아래와 같이 Attribute 와 해당 Attribute의 type을 정해준다.








다음 상단 메뉴바에서 Editor - > Create NSManagedObject SubClasses... 를 선택하면 아래 사진과 같은 다이얼로그가 나타나고

NEXT 클릭후 언어를 swift로 바꾸고 Create 버튼을 클릭한다.





Contacts+CoreDataProperties.swift 라는 파일이 생성된다.

이름 주소 폰번호를 저장하여 이름을 입력후 찾기를 누르면 저장된 이름의 주소와 폰번호를 불러오는 앱을 테스트로 만드는 중인데 storyboard에서 오브젝트를 만드는 과정과 controller 파일에 연결하는 과정은 생략하도록 하겠다.





storyboard에 오브젝트 생성을 하고 연결하는 과정이 끝나면 ViewController.swift 파일을 열어 아래 코드를 입력한다.


import UIKit

import CoreData


class ViewController: UIViewController {

    

    let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

    

    @IBOutlet var name: UITextField!

    @IBOutlet var address: UITextField!

    @IBOutlet var phone: UITextField!

    @IBOutlet var status: UILabel!


    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

}






Save 액션에 아래와 같은 코드를 입력한다. ( 코어데이터를 이용하여 저장소에 데이터 저장)


@IBAction func saveContact(sender: AnyObject) {

        

        let entityDescription = NSEntityDescription.entityForName("Contacts", inManagedObjectContext : managedObjectContext)

        let contact = Contacts(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext)

        

        contact.name = name.text!

        contact.address = address.text!

        contact.phone = phone.text!

        

        do {

            try managedObjectContext.save()

            name.text = ""

            address.text = ""

            phone.text = ""

            status.text = "Contact Saved"

            

        }catch let error as NSError {

            status.text = error.localizedFailureReason

        }

 }






Find 액션에 아래와 같은 코드를 입력한다. ( 코어데이터를 이용하여 저장소에서 데이터 가져오기)


@IBAction func findContact(sender: AnyObject) {

        let entityDescription = NSEntityDescription.entityForName("Contacts", inManagedObjectContext: managedObjectContext)

        

        let request = NSFetchRequest()

        request.entity = entityDescription

        

        let pred = NSPredicate(format: "(name = %@)", name.text!)

        request.predicate = pred

        

        do {

            var results = try managedObjectContext.executeFetchRequest(request)

            

            if results.count > 0 {

                let match = results[0] as! NSManagedObject

                name.text = match.valueForKey("name") as? String

                address.text = match.valueForKey("address") as? String

                phone.text = match.valueForKey("phone") as? String

                status.text = "Matches found: \(results.count)"

            } else {

                status.text = "No Match"

            }

        }catch let error as NSError {

            status.text = error.localizedFailureReason

        }

  }




이렇게 하면 sqlite를 사용하여 데이터를 저장하는 것보다 간편하고 SQL 문법을 몰라도 DB를 사용할 수 있게 된다.




위의 코드는  "핵심만 골라 배우는 ios 9 프로그래밍 (닐스미스 지음/ 황반석 옮김)" 에 있는 예제를 참고하여 작성하였습니다.

 

+ Recent posts