Swift1.2(SugarRecord)를 사용하여 CoreData 작업을 간편하게 수행

코어데이터를 조사하던 중 슈가레코드라는 장서가 발견돼 사용해 보기로 했다.
SugarRecord는 CoreData의 래치이자 Realm의 래치입니다.

CocoaPods


CocoaPods 설치


슈가레코드는 코코팟을 사용하기 때문에 코코아팟을 설치한다.스위프트도 쓸 수 있는 상태가 돼서 회상하면서...
$ gem install cocoapods
$ pod --version
0.36.4

Xcode로 프로젝트 만들기


Xcode로 프로젝트를 만듭니다.먼저 "Testapp CocoapPod01"이라고 부릅니다.
"Use Cocoa Data"에서 선택
$ cd
$ pwd
/Users/user_name/TestAppCocoaPods01
$ pod init

Podfile 준비

$ pwd
/Users/user_name/TestAppCocoaPods01
$ vi Podfile

Podfile 편집


슈가레코드 외에 이번에도 설치했어요.
Podfile
target 'TestAppCocoaPods01' do
  use_frameworks!
  pod 'Alamofire', :git => "https://github.com/Alamofire/Alamofire.git"
  pod 'SwiftyJSON', :git => "https://github.com/SwiftyJSON/SwiftyJSON.git"
  pod 'SugarRecord/CoreData', :git => 'https://github.com/SugarRecord/SugarRecord.git'
end

target 'TestAppCocoaPods01' do
  use_frameworks!
  pod 'Alamofire', :git => "https://github.com/Alamofire/Alamofire.git"
  pod 'SwiftyJSON', :git => "https://github.com/SwiftyJSON/SwiftyJSON.git"
  pod 'SugarRecord/CoreData', :git => 'https://github.com/SugarRecord/SugarRecord.git'
end

SugarRecord 설치

$ pod install

SugarRecord


CoreData 설정

  • 이번에 Categories라는 모형을 준비했습니다
  • configuration을 통해class 설정
  • [프로젝트 이름].클래스 이름으로 설정(원인을 잘 모름)

  • AppDelegate 준비

  • import
  • 이번에는 Sqlite
  • AppDelegate.swift
    import UIKit
    import CoreData
    import SugarRecord
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
        func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    
            let stack: DefaultCDStack = DefaultCDStack(databaseName: "TestAppCocoaPods01.sqlite", automigrating: true)
            SugarRecord.addStack(stack)
    
            //ログレベルを設定(任意らしい)
            SugarRecordLogger.currentLevel = .logLevelError
    
            return true
        }
    }
    

    SugarRecord를 통해 획득한 객체


    Categories.swift
    import Foundation
    import CoreData
    
    class Categories: NSManagedObject {
        @NSManaged var name: String
        func name_plus() -> NSString{
            var neme_plus = self.name + "だよ"
            return neme_plus
        }
    }
    

    전체

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            initDataInsert()
            readData()
    
            if let category: Categories = Categories.by("name", equalTo: "foo").find().firstObject() as? Categories {
                println("edit ------------")
                category.beginWriting()
                category.name = "fooはフーになります"
                category.endWriting()
                category.save()
                println("------------")
            }
    
            readData()
        }
    
        // データーの取得
        func readData() {
    
            var items = Categories.all().find()
            println("readData ------------")
            println(items.count)
    
            for(var i = 0; i < items.count; i++) {
                var categories = items[i] as! Categories
                println(categories.name_plus())
            }
    
            println("------------")
        }
    
        // データーの登録
        func initDataInsert() {
            let category_names: [String] = ["日記", "写真", "技術", "映画", "foo", "bar"]
            for category_name in category_names {
                println("------------")
                println(category_name)
                var categories:Categories = Categories.create() as! Categories
                categories.name = category_name
                var saved:Bool  = categories.save()
                println(saved)
                println("------------")
            }
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
    
        }
    }
    

    쓰기(저장)


    저장 가능(Active Record)
        func initDataInsert() {
            let category_names: [String] = ["日記", "写真", "技術", "映画", "foo", "bar"]
            for category_name in category_names {
                var categories:Categories = Categories.create() as! Categories
                categories.name = category_name
                var saved:Bool  = categories.save()
            }
        }
    

    편집자


    거래가 필요해서요.
  • beginWriting
  • endWriing
  • 상술한 내용을 이용하다
    if let category: Categories = Categories.by("name", equalTo: "foo").find().firstObject() as? Categories {
      category.beginWriting()
      category.name = "fooはフーになります"
      category.endWriting()
      category.save()
    }
    

    넣다


    for 회전으로 획득
    func readData() {
      var items = Categories.all().find()
      for(var i = 0; i < items.count; i++) {
        var categories = items[i] as! Categories
      }
    }
    

    컨디션

  • Xcode 6.3.1
  • swift 1.2
  • iOS 8.2
  • 좋은 웹페이지 즐겨찾기