본문 바로가기
IOS (Swift, Objective-c)

[IOS] Objective-C Realm 사용 RLMArray 써보기

by bryan.oh 2022. 2. 6.
반응형

Realm

RLMArray

 

User 가 있고, 

User 가 사용할 수 있는 언어가 여러개 저장될 수 있는 구조가 있다면, 

아래와 같이 사용할 수 있습니다.

기존에 있던 User Interface 입니다.

// Define your models
@interface User : RLMObject
@property NSString *id;
@property NSString *name;
@property NSInteger age;
@end

@implementation User
+ (NSString *)primaryKey {
    return @"id";
}
@end

여기에 Langs property 를 추가하고 여러개의 Language Class 를 배열로 넣고 싶다면,

 

Language Interface 를 다음과 같이 만듦니다.
Property는 더 추가해도 되겠죠.

// Languages
@interface Langs : RLMObject
@property NSString *lang;
@end
//RLM_ARRAY_TYPE(Langs) // deprecated
RLM_COLLECTION_TYPE(Langs)

@implementation Langs
@end
RLM_ARRAY_TYPE 은 Deprecated 되었습니다. 

 

그리고 User 의 property 로 추가합니다.

 

값 저장 예제

RLMRealm *realm = [RLMRealm defaultRealm];

User *userInit = [[User alloc] initWithValue:@{@"id": [[NSUUID UUID] UUIDString], @"name": @"bryan", @"age": @20}];
NSArray *langArr = [NSArray arrayWithObjects:@"KOR", @"ENG", @"JP", nil];
// int count = [langArr count];
for(NSString *lang in langArr){
    Langs *langs = [[Langs alloc] initWithValue:@{@"lang": lang}];
    [userInit.langs addObject:langs];
}


[realm transactionWithBlock:^{
    [realm addObject:userInit];
}];

 

조회 예제

RLMResults<User *> *allUsers = [User allObjects];
for(User *user in allUsers){
    for(Langs *lang in user.langs){
        NSLog(@"%@", lang.lang);
    }
}

 

728x90
반응형

댓글