오늘은 iOS에서 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을 설치해줍니다.
could not build objective-c module 'RealmSwift'
저의 경우 Realm 사용을 위해 RealmSwift를 import를 하였으나 위와 같은 에러가 발생하였습니다. 위와 같은 에러 발생 시에 다음의 절차를 통해 해결해주시면 됩니다.
XCode menu
-> Product
-> Scheme
-> New Scheme...
-> Target에서 RealmSwift 선택 후 OK
-> Cmd + b
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문서에 나와있습니다.
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
데이터 추가
결과화면
func readMovie() {
print(realm.objects(Movie.self))
}
결과화면
func updateMovie() {
if let movieInfo = realm.objects(Movie.self).filter(NSPredicate(format: "title = %@", titleTextField.text!)).first {
try! realm.write {
movieInfo.director = directorTextField.text!
}
}
}
결과화면
func deleteMovie() {
try! realm.write {
realm.delete(realm.objects(Movie.self))
}
}
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