[iOS] Realm CRUD 구현

고재경·2021년 3월 28일
2

오늘은 iOS에서 Realm을 연동하는 방법을 알아보도록 하겠습니다.

Realm을 사용하는 이유

프로젝트 생성 및 Auto-Layout 세팅

Realm 설치

Realm을 설치하는 방법에는 SwiftPM, Carthage, CocoaPods이 있지만 저는 CocoaPods을 이용하여 Realm을 설치하였습니다.

설치방법
1. terminal에서 프로젝트 디렉토리까지 경로를 이동합니다.
2. pod init 명령을 통해 Podfile을 생성합니다.
3. pod install 명령어 입력 후 생성된 .xcworkspace를 열어 Podfile에 아래의 코드를 추가 해줍니다.

use_frameworks!
pod 'RealmSwift'

    use_frameworks!의 경우 없을 경우에만 추가해주시면 됩니다.
4. pod install을 다시 입력해 Realm을 설치해줍니다.

import RealmSwift error

could not build objective-c module 'RealmSwift'

저의 경우 Realm 사용을 위해 RealmSwift를 import를 하였으나 위와 같은 에러가 발생하였습니다. 위와 같은 에러 발생 시에 다음의 절차를 통해 해결해주시면 됩니다.

XCode menu
-> Product
-> Scheme
-> New Scheme...
-> Target에서 RealmSwift 선택 후 OK
-> Cmd + b

model 생성

import RealmSwift

class Movie: Object {
    @objc dynamic var title = ""
    @objc dynamic var director = ""
}

Realm모델은 Object를 상속받아 사용합니다.
모델에서 그냥 var가 아닌 dynamic var를 사용하는 이유는

Realm model properties must have the @objc dynamic var attribute to become accessors for the underlying database data.

데이터 베이스의 데이터에 접근하기 위해 필수적으로 사용해야한다고 Realm문서에 나와있습니다.

Create

func insertMovie() {
        if let title = titleTextField.text {
            movie.title = title
        }
        
        if let director = directorTextField.text {
            movie.director = director
        }
        
        try! realm.write {
            realm.add(movie)
        }
        
        // Realm 경로확인
        print(Realm.Configuration.defaultConfiguration.fileURL!)
    }

경로는 RealmStudio를 통해 .realm 파일을 열어 데이터 베이스 상태를 확인하기 위해 확인합니다. 저는 터미널을 이용하여 파일을 열었습니다.
RealmStudio Download Link

데이터 추가

결과화면

Read

func readMovie() {
        print(realm.objects(Movie.self))
    }

결과화면

Update

func updateMovie() {
        if let movieInfo = realm.objects(Movie.self).filter(NSPredicate(format: "title = %@", titleTextField.text!)).first {
            try! realm.write {
                movieInfo.director = directorTextField.text!
            }
        }
    }

결과화면

Delete

func deleteMovie() {
        try! realm.write {
            realm.delete(realm.objects(Movie.self))            
        }
    }

References

https://docs.mongodb.com/realm-legacy/docs/swift/latest/
https://ios-development.tistory.com/31
https://jinshine.github.io/2018/11/20/iOS/Realm%20%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95/
https://teqoo.tistory.com/248

0개의 댓글