처음 Realm을 사용할 때만 해도 사용자가 없어서 정보가 많이 부족했다.
그럼에도 불구하고 사용하기가 쉬워서 DB 대신에 사용하기로 결정을 했는데,
역시나 사용하다보면 알 수 없는 문제에 봉착하게 된다.
- Key 혹은 Index로 지정할 프로퍼티는 숫자형으로 하라.
서버에서 내려주는 Index 값이 엄청 길어서 숫자로 할까, 문자형으로 할까 논의 끝에
정확히 몇 자리까지 길지 파악이 안되서 문자형으로 만들게 되었다.
NSString으로 만들고 Realm에서 정렬을 사용해서 결과값을 받으니 순서가 엉망진창이었다.
담당자분께 물어본 결과 "0"을 채워서 문자의 길이을 똑같이 맞추어주지 않으면 정렬이 되지 않는다고 했다.
생각해보니 문자열로 만들면 RDBMS에서도 비슷한 현생이 발생한다. 부디 숫자로 만들길! - 이미 존재하는 Object의 값을 변경하고 싶을 때는 Object을 가져오기만 하면 된다.
아무래도 "+ (instancetype)createOrUpdateInRealm:(RLMRealm *)realm withValue:(id)value;"
이 메소드를 사용하다보니 '이미 저장되어 있는 데이터에서 일부 값을 변경해야 될 때는 어떻게 할까?'라는 의문이 생겼다.
그래서 "+ (instancetype)objectForPrimaryKey:(id)primaryKey;"라든가
"+ (RLMResults *)objectsInRealm:(RLMRealm *)realm where:(NSString *)predicateFormat, ...;"
와 같은 메소드를 사용하여 RLMObject을 가져와서 createOrUpdate... 메소드의 첫번째 파라메터로 넣었는데
데이터가 자꾸 중복해서 생기는 것이였다.
해결 방법은 createOrUpdate... 메소드를 사용할 때는
NSDictionary로 만들어진 데이터 (서버에서 받아온 데이터를 파싱한) 를 사용하고,
이미 존재하는 데이터를 수정하고 싶을 경우에는 objectForPrimaryKey.. 등의 메소드로 Object를 가져와서
트랜잭션 코드 안에서 직접적으로 변경하면 된다. - 64bit에서 long long 변수를 의심하라.
최근 테스트 과정에서 다소 심각한 문제가 발견되었다. 0.93.2에서도 발생하는 문제이니 꼭 참고하는 것이 좋겠다.
long long 으로 선언한 값을 조회할 때 '1 > a > 9' 라고 조회를 한다면, 2~8의 값이 나와야 하는데 엉뚱한 값이 조회된다거나
반대의 경우에도 마찬가지로 엉뚱한 값이 조회가 된다.
아무래도 Realm에서 64bit로 넘어오면서 long long 값에 대한 처리가 잘 못 되어 있는 것 같다는 생각이 든다.
NSInteger도 테스트 해봤는데 비슷한 현상이 있었던 것 같다. 꼭 반드시 테스트를 해보고 넘어가자.
시물레이터에서는 재현이 자주 되었고, 단말기에서는 재현되지 않았다. (0.93.2 버전 이후로 수정되었다고 한다.) - JSON 파싱에 주의하라.
JSON을 파싱에서 Realm에 저장할 때, Realm에서 만든 Object클래스의 변수 타입대로 JSON을 파싱하는 것이 아니라,
변수 타입대로 JSON 데이터를 넣지 않으면 에러가 발생하게 된다.
Realm Object 클래스에서 NSInteger로 선언하고, JSON에 "문자열"의 형태로 들어가있다면 100% 에러가 발생하니 주의하자. - 최대한 try ~ catch 를 활용하자.
트랙잭션 부분에서 죽을 경우 명확하게 어느 지점에서 에러가 발생했는지 알려주지 않는 경우가 있다.
특히, 4번의 경우 try ~ catch로 감싸지 않으면 못 찾을 확률이 높다. 만약에 잘 못 찾겠으면 최대한 try ~ catch로 감싸고,
디버깅 후에 제거하는 것이 좋다.
'Mobile Application > iOS' 카테고리의 다른 글
[Setting] 앱 내 설정으로 이동하기. (0) | 2015.08.05 |
---|---|
[PhotoKit] 이미지 저장하기. (0) | 2015.07.30 |
[XCode] 버전별 dmg 리스트 업 (0) | 2015.06.09 |
[PhotoKit] PHAsset을 추출하기. (0) | 2015.03.05 |
[AssetLibrary] iOS 8.1 이상에서 포토 스트림 지원하기. (0) | 2015.03.04 |