Realm총 정리
작성일
총 정리
설치
pod 'RealmSwift'
AppDelegate.swift
import RelamSwift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
do {
let _ = try Realm()
} catch {
print("Error initialising new realm, \(error)")
}
return true
}
기본적인 사용법
do {
let realm = try Realm()
catch {
print("Error initialising new realm, \(error)")
}
데이터 확인하는 방법
Appdelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print(Realm.Configuration.defaultConfiguration.fileURL)
}
출력된 파일 경로가 나오면, Realm Studio를 연후
command + shift + G 를 누르고 print된 경로를 복사 붙여 넣기 한다.
그러면, default.realm 파일이 있는데 눌러서 데이터를 확인할 수 있다.
!!앱스토어에서 RelamBrowser를 다운받았는데 encryption key을 요구한다면?!
https://studio-releases.realm.io/latest/download/mac-dmg 위 링크를 눌러서 다운받으시면 됩니다!!
데이터 모델 만드는법
Data.swift
import RealmSwift
class Date: Object {
@objc dynamic var name: String = ""
@objc dynamic var age: Int = 0
}
- 필요한 클래스이름으로 작성하면 된다.
- @ojbc dynamic를 변수에 작성을 해야한다.
일대 다 설정하는 방법
하나의 카테고리가 여러개의 아이템을 담는 방법
Category.swift
import Foundation
import RealmSwift
class Category: Object {
@objc dynamic var category: String = ""
let items = List<Item>()
}
Item.swift
import Foundation
import RealmSwift
class Item: Object {
@objc dynamic var title: String = ""
@objc dynamic var done: Bool = false
var parentCateory = LinkingObjects(fromType: Category.self, property: "items")
}
참고해서 1:n의 관계를 설정해 나가면 된다.
parentCateory는 내가 사용할 변수 이름이다. 바꾸면된다.
items는 내가 1에서 설정한 변수 이름이다.
CRUD
사용방법
VC에서
import RealmSwift
설정 해준후,
let realm = try! Realm()
realm 객체를 생성해준다.
쓰기
저장 하는 메서드에가서
fun save(category: Category) {
do {
try realm.write {
realm.add(category)
}
} chtch {
print("Error saving category \(error)")
}
tableView.reloadData()
}
이런식으로 저장할 클래스를 매개변수로받고, 그걸 저장해주면 된다.
읽기
전역 변수로 설정해주고
var categories: Result<Category>?
아래 함수로 불러오면 된다.
func loadCategories() {
categories = realm.objects(Category.self)
}
AutoUpdate라고 하는데 아직 확인은 못해봤다. 프로젝트하면서 확인할 예정 + didSet를 활용해서 데이터를 추가해주면 좋을것 같다.
위에
categories: Result<Category>?
카테고리가 옵셔널 값이니 밑에서 사용할땐,
categories?.count ?? 1
이런식으로 Nil Coalescing Operator해줘야 한다.
불러올떄 오름차순 내림차순하는법
전역변수
let realm = try! Realm()
var itemArray = Results<Item>?
var selectedCategory: Category? {
didSet{
load
}
}
func loadItems() {
itemArray = selectedCategory?.items.sorted(byKeyPath: "title", ascending: true)
tableView.reloadData()
}
이런방식으로 배열에 담을때 정렬하면서 리로드해주면 된다.
업데이트하기
didSelectRowAt에서
if let item = itemAraray?[indexPath.row] {
try realm.write {
// 업데이트할 내용
} catch {
print("Error saving done status, \(error)")
}
}
삭제하기
didSelectRowAt에서
if let item = itemAraray?[indexPath.row] {
try realm.write {
realm.delete(item)
} catch {
print("Error saving done status, \(error)")
}
}
Realm에서 사진(UIImage형)저장 방법
Data() 형으로 넣어줘야한다.
UIImage -> Data()
// UIImage -> Data
let data: Data = image?.jpegData(compressionQuality: 0.9)
// Data -> UIImage
let uiImage: UIImage = UIImage(data: imageData)
Realm객체를 다른 곳에서도 사용하게 만들기
static으로 선언 해주면된다.
ViewController.swift
static let shared = ViewController()
let realm = try! Realm()
접근하는 방법은
ViewController.shared.realm
이런식으로 접근해서 사용하면 된다.