CoreData 자세히 보기

17239 단어 SwiftiOS
지금까지 제작된 앱은 높은 점수를 저장하기 위해 NSUserDefaults를 사용했고, 이번에는 토도 앱 시험 제작 때 코어데이터에 접근해 봤다.촉감만 있어서 너무 쉬워요.비망록을 함께 정리하다.

동작 이미지



CoreData란


객체를 지속하는 프레임워크를 위해 객체와 관계 데이터베이스 SQLite 간에 처리할 수 있습니다."O/R 매핑"을 어디서 들은 적이 있습니까? 바로 CoreData입니다.

CoreData 사용 준비

  • NSManagedObjectModel 객체 만들기
  • N S P ersistent Store Coordinator 객체 제작
  • NSManagedObject Context 객체 만들기
  • 프로젝트를 제작할 때'Use Core Data'를 선택하면 이 같은 준비를 한다.AppDelegate는 소스를 자동으로 보완합니다.

    솔리드 작성


    CoreData의 모델 편집기에서 ToDo 솔리드를 만들고 Attributes에서 String으로 "memo"를 추가합니다.

    화면 만들기



    ViewController 수정 사항


    ViewController.swift
    import UIKit
    import CoreData
    
    class ViewController: UIViewController {
    
        var obj : NSManagedObject? = nil
    
        @IBOutlet weak var tfMemoCreate: UITextField!
        @IBOutlet weak var tfMemoRead: UITextField!
        @IBOutlet weak var tfMemoUpdate: UITextField!
    
        // Save
        @IBAction func btnSaveAction() {
            if(tfMemoCreate.text == "") {
                return
            }
            // Get ManagedObjectContext
            let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
            let managedContext: NSManagedObjectContext = appDelegate.managedObjectContext!
    
            // Create new ManagedObject
            var newTodo = NSEntityDescription.insertNewObjectForEntityForName("ToDo", inManagedObjectContext: managedContext) as NSManagedObject
            newTodo.setValue(tfMemoCreate.text, forKey: "memo")
    
            // Error handling
            var error: NSError?
            if !managedContext.save(&error) {
                println("Could not save \(error)")
            }
            println(newTodo)
            println("Object Saved")
        }
    
        // Read
        @IBAction func btnLoadAction() {
            if(tfMemoRead.text == "") {
                return
            }
            // Get ManagedObjectContext
            let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
            let managedContext: NSManagedObjectContext = appDelegate.managedObjectContext!
    
            // Set search conditions
            let fetchRequest = NSFetchRequest(entityName: "ToDo")
            fetchRequest.returnsObjectsAsFaults = false
            fetchRequest.predicate = NSPredicate(format: "memo = %@", tfMemoRead.text)
            var error: NSError?
    
            // Get result array from ManagedObjectContext
            var fetchResults: Array = managedContext.executeFetchRequest(fetchRequest, error: &error)!
            if(fetchResults.count > 0){
                obj = fetchResults[0] as? NSManagedObject
                let memo: String = obj!.valueForKey("memo") as String
                tfMemoUpdate.text = memo
                println(obj)
                println("Object Read")
            }else {
                println("Could not fetch \(error)")
                tfMemoUpdate.text = "Error: Memo Nothing."
            }
        }
    
        // Update
        @IBAction func btnUpdateAction() {
            // Get ManagedObjectContext
            let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
            let managedContext: NSManagedObjectContext = appDelegate.managedObjectContext!
    
            // Change value of managedObject
            if(obj != nil){
                obj?.setValue(tfMemoUpdate.text, forKey: "memo")
    
                // Save value to managedObjectContext
                var error: NSError?
                if !managedContext.save(&error) {
                    println("Could not update \(error)")
                }
                tfMemoUpdate.text = obj?.valueForKey("memo") as String
                println(obj)
                println("Object updated")
            }
    
        }
    
        // Delete
        @IBAction func btnDeleteAction() {
            // Get ManagedObjectContext
            let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
            let managedContext: NSManagedObjectContext = appDelegate.managedObjectContext!
    
            // Delete managedObject from managed context
            if(obj != nil){
                println(obj)
                managedContext.deleteObject(obj!)
    
                // Save value to managed context
                var error: NSError?
                if !managedContext.save(&error) {
                    println("Could not update \(error)")
                }
                obj = nil
                println("Object Deleted")
                tfMemoUpdate.text = ""
            }
        }
    
        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.
        }
    }
    

    참고 자료


    Swift를 통한 CoreData 구현
    Swift 학습 – CoreData CRUD 운영 샘플

    좋은 웹페이지 즐겨찾기