Repository navigation
Realm(Photo, User, ChatMsg)
Object 클래스는 Realm 클래스. 그리고 Realm에 저장될 변수들은 dynamic으로 선언 필요. Realm은 enum을 지원하지 않기 때문에 private 변수로 key값을 따로 저장해서 computed property로 변환해서 사용하고 있다.
위 상황에서 Realm이 지원하지 않는 타입을 저장하는 경우 computed property를 사용해서 구현하고 일반적으로 get/set을 다 구현하는데, Realm이 get/set이 둘 다 있는 경우 컬럼이 없음에도 불구하고 테이블에서 가져오려고 시도를 하다가 죽게 된다. 이 경우 위 메서드 선언이 필요함.
return ["hasBlockedChat", "chatRoomBlockState"]dedicated init을 만들 수 없는 단점이 있다. 이 경우 convenience init을 통해 원하는 인자를 받는 생성자를 구현하고, 추가적인 설정은 class 메서드에서 하는 것이 나을 수 있다.
private convenience init(id: ID) {
self.init()
self.id = id
self.recentEventTime = CFAbsoluteTime
}
final class func create(id: Photo.ID = InvalidId, msg: String) -> Photo {
let photo = Photo(id: id)
photo.msg = msg
return photo
}정렬, 등의 목적을 위해 primary key 설정 가능
override static func primaryKey() -> String? {
return "id"
}배열을 사용하고 싶을 경우 Realm의 클래스 List를 사용한다. 사용하는 방법도 잘 알아 두어야 함.
write {
photo.photoState = .Liked
}realm.objects(type)
동현이 SwishDatabase에서 rawObjects()라는 메서드로 래핑해놓음
그리고 Array<T>로 반환해서 최대한 서드파티와 로직이 분리되게 하기 위해서
objects()라는 메서드도 제작let photoCandidates rawObjects(Photo).filter("id = \(id)")
if photoCandidates.count > 0 {
return photoCandidates[0]
}
return nilUser(Super Class), Me, OtherUser로 구성되어 있다. Me, OtherUser가 유일하게 Realm의 Object 클래스를 상속받은 클래스(User)를 상속받는 클래스.
동현이 작업을 하면서 이 과정에서 시행착호가 있었다고 한다.
-
Home/User/라이브러리/Developer/CoreSimulator/해당디바이스/data/Containers/Data/Application/해당앱/Documents/default.realm에서 db 파일을 살펴볼 수 있음.
-
Realm Browser를 맥 앱스토어에서 받아서 열람 가능. Realm 버전이 올라가서 브라우저로 열람이 되지 않는 경우 realm.io에서 최신 베타 브라우저를 받을 수 있음.
내 정보를 불러올 때 이 메서드를 사용해 Me 객체를 획득
추후 인트로 화면에서 유저 이미지, 이름, 소개글을 적고 메인으로 넘어갈 때 MeManager.registerMe()를 불러 주면 된다.
프로필 수정화면에서 이름, 어바웃을 수정했을 경우 쓰일 예정, 이미지와는 따로 처리 필요. KVO로 옵저빙해서 프로필 화면에서 UI 수정 필요
프로필 수정화면에서 이미지가 변경되었을때 불러줘야 하는 메서드이고, 위와 마찬가지로 KVO로 profileImageUrl을 옵저빙해서 UI를 변경하게 구현 필요
내 정보 화면의 viewDidLoad()에서 불러서 갱신을 해 주는 용도(클로져에서 갱신하기 때문에 동시에 me()를 통해서 로컬의 데이터 역시 갱신을 해 줘야 한다)
특별한 로직은 없어서 큰 무리는 없을 것. 데이터만 살펴보자
realm 객체를 만들 때 dynamic var로 선언, 그리고 초기값이 꼭 필요. NSDate도 Realm에서 지원을 하지만 동현이 어떤 필요에 의해서 Double인 timeIntervalSince1970으로 computed property를 활용해서 저장. 그래서 ignoredProperties()에도 포함.
realm.io의 Models의 Supported Types에 지원 타입이 명시. NSData도 지원한다는 것을 알아두자.