728x90
Realm대한 사용방법과 CRUD 예제를 만들어보면서 Realm에 대해 알아보겠습니다.
Realm이란?
오픈소스로 모바일에 최적화된 데이터베이스 라이브러리 입니다.
ORM이 아닌 데이터컨테이너 모델을 사용하고 데이터객체는 Realm에 객체로 저장됩니다.
Performance
프로젝트 만들기
간단한 CRUD예제를 만들어 보면서 Realm에 대해 알아 보도록 하겠습니다.
- 만들화면
먼저 코코아팟에 pod ‘RealmSwift’ 추가해줍니다.
Realm?
Realm은 객체 컨테이너로 동작하기 때문에 Object를 생성 해야됩니다.
- 클래스(class)로 구성되며, @objc dynamic을 변수 앞에 적어줘야됩니다.
준비 과정
- 모델링의 데이터 변수 선언
- Realm 변수 선언
var items: Results<ShoppingList>? //ShoppingList 데이터
var realm: Realm?
//TextField
@IBOutlet weak var stuffTextField: UITextField!
@IBOutlet weak var priceTextField: UITextField!
//TableView
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
realm = try? Realm()
//ShoppingList 데이터들을 가져옴
items = realm?.objects(ShoppingList.self)
}
추가
func inputData(database: ShoppingList) -> ShoppingList {
if let name = stuffTextField.text {
database.name = name
}
if let price = priceTextField.text {
database.price = price
}
return database
}
@IBAction func addAction(_ sender: UIButton) {
try! realm?.write {
realm?.add(inputData(database: ShoppingList()))
}
}
삭제
@IBAction func deleteAction(_ sender: UIButton) {
do {
try realm?.write {
realm?.delete(items!)
//realm?.delete(items![1]) // index로 접근해서 삭제 가능
}
} catch {
print("Error")
}
}
업데이트
@IBAction func updateAction(_ sender: UIButton) {
try! realm?.write {
guard let items = items else { return }
items.forEach({ (list) in
if let name = stuffTextField.text, let price = priceTextField.text {
if list.name == name {
list.name = name
list.price = price
}
}
})
}
}
조회
@IBAction func readAction(_ sender: UIButton) {
print(realm?.objects(ShoppingList.self))
}
실시간 Subscribe
Realm은 Push Driven이기 때문에 NotificationToken을 이용하면 실시간으로 구독하여 실시간으로 업데이트 가능합니다.
//선언
var notificationToken: NotificationToken?
...
notificationToken = items?.observe({ (chagne) in
print("chagne :", chagne)
self.tableView.reloadData()
})
해제를 꼭 해주어야됩니다.
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
//push deriven을 중단
notificationToken?.invalidate()
}
deinit {
notificationToken?.invalidate()
}
경로확인
print(Realm.Configuration.defaultConfiguration.fileURL!)
//출력
file:///Users/seungjin/Library/Developer/CoreSimulator/Devices/6842490C-149A-4E0A-9E95-E97BC6154091/data/Containers/Data/Application/1995B823-E0E0-4EFC-BDCF-47225A67AD14/Documents/default.realm
데이터 확인
- Realm Database Realm Studio 다운로드
- Finder를 통해 위의 경로로 이동.
- default.realm을 실행하면 해당 데이터들을 확인 할 수 있습니다.
'iOS' 카테고리의 다른 글
[iOS] ScrollView (0) | 2019.07.25 |
---|---|
[iOS] Photos Framework (0) | 2019.07.25 |
[iOS] UIDevice (0) | 2019.07.24 |
[iOS] GCD(Grand Central Dispatch) (0) | 2019.07.24 |
ARC(Automatic Reference Counting) (0) | 2019.07.24 |