-
[iOS_MyInventory] Realm 적용 1 - ManagerClass 를 활용하기Project/[release] iOS - MyInventory 2020. 3. 20. 17:37
Realm Test Flow
- 공식문서를 확인하여 Object 생성, 기본적인 CRUD 동작 확인
- Realm tutorial 을 통해 어떻게 활용하는지 확인
- 기존 프로젝트의 데이터는 struct model 로 생성되있으므로, RealmObject 를 struct 로 변환할수 있는지 확인, 테스트코드 작성
- TodayExtension 에서 메인앱에서 쓰고 있는 Realm을 가져올수 있는지 테스트
STEP_1 ) Realm 작업을 전용으로 하는 Class 를 통해 CRUD 테스트 해보기
우선 저장할 데이터의 Realm 객체 모델을 생성한다.
id 는 사용자를 식별하기 위한 고유한 값으로, 전체 데이터수를 기반으로 1씩 올라간다.
@objcMembers class RealmPerson: Object { dynamic var id: Int = 0 dynamic var firstName: String = "" dynamic var lastName: String = "" var gender = RealmOptional<Int>(0) var age = RealmOptional<Int>(0) dynamic var myImage: Data? = nil override static func primaryKey() -> String? { return "id" } }
Realm객체의 작업을 담당하는 RealmManager 클래스를 생성하였다.
CRUD 작업은, 이 클래스를 통하여 작업이 될 것이다.
static func realm() -> Realm? 을 통해 realm 인스턴스를 생성하고, 이를 통해 데이터의 저장, 쓰기등의 작업을 한다.
public class RealmManager { let realm = try? Realm() public func getUrl() -> URL? { let url = Realm.Configuration.defaultConfiguration.fileURL print("😈 Realm Database fileUrl:", url?.absoluteString) return url } static func realm() -> Realm? { do { return try Realm() } catch { print(error.localizedDescription) } return nil } func saveObjects(objs: Object) { guard let realm = RealmManager.realm() else { return } try? realm.write ({ realm.add(objs) }) } func getObjects(type: Object.Type) -> Results<Object>? { return realm?.objects(type) } static func incrementID() -> Int { guard let realm = RealmManager.realm() else { return 0 } return (realm.objects(RealmPerson.self).max(ofProperty: "id") as Int? ?? 0) + 1 } }
RealmManager Class 를 통한 데이터 추가는 아래처럼 사용한다.
let id = RealmManager.incrementID() let newPerson = RealmPerson(id: id, firstName: "Jin", lastName: "su", age: age, gender: gender) realmManager.saveObjects(objs: newPerson)
'Project > [release] iOS - MyInventory' 카테고리의 다른 글
[iOS_MyInventory] Realm 적용 3 - todayExtension (0) 2020.03.22 [iOS_MyInventory] Realm 적용 2 - Struct 와 같이 사용하기 (0) 2020.03.21 [iOS_MyInventory] 카테고리 수정, 아이템 리스트 화면 추가 (0) 2020.03.14 [iOS_MyInventory] 카테고리 메뉴 - 디자인 적용, 등록, 삭제 (0) 2020.03.10 [iOS_MyInventory] 화면 구조 잡기 (0) 2020.03.09