Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Stacking Fire

Realm 모바일 데이터베이스 본문

개발/iOS

Realm 모바일 데이터베이스

라우비 2017. 7. 2. 18:02

Realm을 이용해서 간단하게 주소록을 만들어 봤습니다.

(Dependancy Manager는 Carthage를 사용했습니다. 설정법은 여기)


RealmCarthagePractice.zip


했던 예제 코드입니다 :) (2017. 7. 3. 14시에 수정하였습니다.)

ScreenShots


구현부

1.Object 서브클래스 만들기

Realm을 프로젝트에 추가하면 자동으로 Object라는 클래스를 사용할 수 있게 됩니다. 굉장히 당당한 이름이네요... NSObject가 마치 외부 라이브러리처럼 보이게 하는 Realm의 위엄!

import Realm
import RealmSwift

class Contact: Object {
    
    ///'dynamic var'로 프로퍼티를 설정해 줍니다.
    dynamic var personID: Int = 0
    dynamic var name: String = ""
    dynamic var phoneNumeber: String = ""
    dynamic var birthDay: Date?
    
    ///새로운 PrimaryKey를 만들어 할당해 줍니다.
    func createNewPrimaryKey() {
        self.personID = UserDefaults.standard.integer(forKey: "primary_key") + 1
        UserDefaults.standard.set(self.personID, forKey: "primary_key")
    }
    
    ///Primary Key를 등록해 줍니다.
    override static func primaryKey() -> String? {
        return "personID"
    }
}

2. Object 추가하기

이후에는 놀랍도록 그냥 클래스 인스턴스처럼 사용할 수 있습니다. 생성 이후에는 realm.write(block: (() throws -> Void)를 이용해서 Realm에 변경사항을 저장할 수 있습니다.

let contact: Contact = Contact()
contact.name = nameTextField.text!
contact.phoneNumeber = phoneNumberTextField.text!
contact.birthDay = datePickerForBirthDay.date
contact.createNewPrimaryKey()

//다른 스레드 작동을 염두에 두고 새로 생성
let realm: Realm = try! Realm() 
try! realm.write {
    realm.add(item)
}

3. Object 불러오기

primaryKey를 설정해 놓았으니 그걸로 찾아올 수도 있고, filter를 이용할 수도 있습니다.

//primaryKey를 사용하는 방법! 옵저빙 프로퍼티에 걸어 보았습니다.
var displayingItemIndex: Int! {
    didSet {
        self.displyingItem = realm
            .object(ofType: Contact.self,
                    forPrimaryKey: displayingItemIndex)
    }
}

//filter를 이용하는 방법! 올린 샘플 프로젝트에는 해당하지 않습니다.
let displyingItems = realm.objects(Contact.self)
                                         .filter(format: "age > %d", filteringAge)

로컬 데이터 저장을 위한 세팅은 이것이 전부입니다. 생각보다 굉장히 간단하네요. 물론 좀 더 큰 프로젝트가 되면 해야 할 일이 많아지겠지만, 지금 단계에서는 굉장히 직관적으로 할 수 있어서 좋네요!

'개발 > iOS' 카테고리의 다른 글

Tip. UIControl 바깥을 탭해서 키보드 내리기  (0) 2017.07.04
Tip. UINavigationBar의 사용  (0) 2017.07.04
카르타고(Carthage) 활용법  (0) 2017.06.29
What's New In Cocoa Touch 2017  (0) 2017.06.23
Cocoa에게 Delegation이란?  (0) 2017.06.13
Comments