RLM 섹션 결과

Objective-C

@interface RLMSectionedResults<RLMKeyType : id <RLMValue>,
                               RLMObjectType : id <RLMValue>>
    : NSObject <RLMSectionedResult>

스위프트

@_nonSendable(_assumed) class RLMSectionedResults<RLMKeyType, RLMObjectType> : NSObject, RLMSectionedResult where RLMKeyType : RLMValue, RLMObjectType : RLMValue

섹션 키로 결정된 섹션에 요소를 보유하는 느리게 평가되는 collection입니다.

  • 섹션화된 결과 collection에 있는 모든 키의 배열입니다.

    선언

    Objective-C

    @property (nonatomic) NSArray<RLMKeyType> *_Nonnull allKeys;

    스위프트

    var allKeys: [RLMKeyType] { get set }
  • 이 collection에 있는 섹션의 총량입니다.

    선언

    Objective-C

    @property (nonatomic, readonly) NSUInteger count;

    스위프트

    var count: UInt { get }
  • 지정된 인덱스의 섹션을 반환합니다.

    선언

    Objective-C

    - (nonnull RLMSection<RLMKeyType, RLMObjectType> *)objectAtIndexedSubscript:
        (NSUInteger)index;

    스위프트

    subscript(index: UInt) -> RLMSection<RLMKeyType, RLMObjectType> { get }
  • 지정된 인덱스의 섹션을 반환합니다.

    선언

    Objective-C

    - (nonnull RLMSection<RLMKeyType, RLMObjectType> *)objectAtIndex:
        (NSUInteger)index;

    스위프트

    func object(at index: UInt) -> RLMSection<RLMKeyType, RLMObjectType>

동결

  • 이 섹션화된 결과 컬렉션의 고정된(불변) 스냅샷을 반환합니다.

    동결 사본은 불변의 섹션화된 결과 collection으로, 이 섹션화된 결과 collection이 현재 포함하고 있는 것과 동일한 데이터를 포함하지만 포함하는 Realm에 쓰기가 이루어질 때 업데이트되지 않습니다. 라이브 섹션 결과 collection과 달리 동결 섹션 결과 collection은 모든 스레드에서 액세스할 수 있습니다.

    경고

    쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.

    경고

    Realm에서 쓰기 트랜잭션(write transaction)을 수행하는 동안 동결된 섹션의 결과 컬렉션을 장기간 유지하면 Realm 파일 크기가 커질 수 있습니다. 자세한 내용은 RLMRealmConfiguration.maximumNumberOfActiveVersions 를 참조하세요.

    선언

    Objective-C

    - (nonnull instancetype)freeze;

    스위프트

    func freeze() -> Self
  • 이 동결 섹션 결과 collection의 라이브 버전을 반환합니다.

    이 메서드는 동일한 동결 섹션 결과 collection의 라이브 참고를 확인합니다. 라이브 섹션에서 호출하면 자체를 반환합니다.

    선언

    Objective-C

    - (nonnull instancetype)thaw;

    스위프트

    func thaw() -> Self
  • 섹션으로 구분된 기본 결과 collection이 고정되었는지 여부를 나타냅니다.

    동결 섹션으로 구분된 결과 collection은 변경할 수 없으며 모든 스레드에서 액세스할 수 있습니다.

    선언

    Objective-C

    @property (nonatomic, readonly, getter=isFrozen) BOOL frozen;

    스위프트

    var isFrozen: Bool { get }

섹션별 결과 알림

  • 섹션화된 결과 컬렉션이 변경될 때마다 호출될 블록을 등록합니다.

    블록은 초기 섹션화된 결과 컬렉션과 비동기적으로 호출된 다음, 결과의 객체 또는 결과에 포함된 객체를 변경하는 각 쓰기 트랜잭션(write transaction) 후에 다시 호출됩니다.

    블록이 처음 호출될 때 change 매개변수는 nil 이(가) 됩니다. 그 이후의 각 호출에 대해 섹션의 어떤 행이 추가, 제거 또는 수정되었는지에 대한 정보가 포함됩니다. 쓰기 트랜잭션(write transaction)이 섹션의 객체를 수정하지 않은 경우 블록은 전혀 호출되지 않습니다. 변경 사항이 보고되는 방법과 UITableView 업데이트의 예에 대한 자세한 내용은 RLMSectionedResultsChange 설명서를 참조하세요.

    차단이 호출되면 RLMSectionedResults 객체는 완전히 평가된 최신 상태가 됩니다.

    알림은 표준 이벤트 루프를 통해 전달되므로 다른 활동으로 이벤트 루프가 차단된 동안에는 전달할 수 없습니다. 알림을 즉시 전달할 수 없는 경우 여러 알림이 단일 알림으로 병합될 수 있습니다. 여기에는 초기 결과에 대한 알림이 포함될 수 있습니다. 예를 들어 다음 코드는 알림 차단을 추가한 직후 쓰기 트랜잭션(write transaction)을 수행하므로 초기 알림이 먼저 전달될 기회가 없습니다. 결과적으로 초기 알림에는 쓰기 트랜잭션(write transaction) 후 Realm의 상태가 반영됩니다.

    RLM 결과 *results = [Dog allObjects]; RLM 섹션 결과 *sectionedResults = [resultssectionedResultsUsingKeyPath:@"age"ascending:예]; self.token = [sectionedResults addNotificationBlock:^(RLMSectionedResults *sectionedResults, RLMSectionedResultsChange *changes) { // 예제의 경우 한 번만 실행 NSLog(@"sectionedResults.count: %zu", SectionedResults.count); // => 1 }]; [realm transactionWithBlock:^{ Dog *dog = [[Dog alloc] init]; dog.name = @"Rex"; dog.age = 5; [realm addObject:dog]; }]; // 런 루프 실행 컨텍스트의 끝

    업데이트를 해당 블록에 계속 전송하려면 반환된 토큰을 오랫동안 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서 -invalidate 을 호출합니다.

    경고

    쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.

    경고

    대기열은 직렬 대기열이어야 합니다.

    선언

    Objective-C

    - (nonnull RLMNotificationToken *)addNotificationBlock:
        (nonnull void (^)(RLMSectionedResults<RLMKeyType, RLMObjectType> *_Nonnull,
                          RLMSectionedResultsChange *_Nonnull))block;

    스위프트

    func addNotificationBlock(_ block: @escaping (RLMSectionedResults<RLMKeyType, RLMObjectType>, RLMSectionedResultsChange) -> Void) -> RLMNotificationToken

    매개변수

    block

    변경이 발생할 때마다 호출되는 차단입니다.

    반환 값

    업데이트가 전달되기를 원하는 기간 동안 보유해야 하는 토큰입니다.

  • 섹션화된 결과 컬렉션이 변경될 때마다 호출될 블록을 등록합니다.

    블록은 초기 섹션화된 결과 컬렉션과 비동기적으로 호출된 다음, 결과의 객체 또는 결과에 포함된 객체를 변경하는 각 쓰기 트랜잭션(write transaction) 후에 다시 호출됩니다.

    블록이 처음 호출될 때 change 매개변수는 nil 이(가) 됩니다. 그 이후의 각 호출에 대해 섹션의 어떤 행이 추가, 제거 또는 수정되었는지에 대한 정보가 포함됩니다. 쓰기 트랜잭션(write transaction)이 섹션의 객체를 수정하지 않은 경우 블록은 전혀 호출되지 않습니다. 변경 사항이 보고되는 방법과 UITableView 업데이트의 예에 대한 자세한 내용은 RLMSectionedResultsChange 설명서를 참조하세요.

    차단이 호출되면 RLMSectionedResults 객체는 완전히 평가된 최신 상태가 됩니다.

    알림은 표준 이벤트 루프를 통해 전달되므로 다른 활동으로 이벤트 루프가 차단된 동안에는 전달할 수 없습니다. 알림을 즉시 전달할 수 없는 경우 여러 알림이 단일 알림으로 병합될 수 있습니다. 여기에는 초기 결과에 대한 알림이 포함될 수 있습니다. 예를 들어 다음 코드는 알림 차단을 추가한 직후 쓰기 트랜잭션(write transaction)을 수행하므로 초기 알림이 먼저 전달될 기회가 없습니다. 결과적으로 초기 알림에는 쓰기 트랜잭션(write transaction) 후 Realm의 상태가 반영됩니다.

    RLM 결과 *results = [Dog allObjects]; RLM 섹션 결과 *sectionedResults = [resultssectionedResultsUsingKeyPath:@"age"ascending:예]; self.token = [sectionedResults addNotificationBlock:^(RLMSectionedResults *sectionedResults, RLMSectionedResultsChange *changes) { // 예제의 경우 한 번만 실행 NSLog(@"sectionedResults.count: %zu", SectionedResults.count); // => 1 }]; [realm transactionWithBlock:^{ Dog *dog = [[Dog alloc] init]; dog.name = @"Rex"; dog.age = 5; [realm addObject:dog]; }]; // 런 루프 실행 컨텍스트의 끝

    업데이트를 해당 블록에 계속 전송하려면 반환된 토큰을 오랫동안 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서 -invalidate 을 호출합니다.

    경고

    쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.

    경고

    대기열은 직렬 대기열이어야 합니다.

    선언

    Objective-C

    - (nonnull RLMNotificationToken *)
        addNotificationBlock:
            (nonnull void (^)(
                RLMSectionedResults<RLMKeyType, RLMObjectType> *_Nonnull,
                RLMSectionedResultsChange *_Nonnull))block
                       queue:(nonnull dispatch_queue_t)queue;

    스위프트

    func addNotificationBlock(_ block: @escaping (RLMSectionedResults<RLMKeyType, RLMObjectType>, RLMSectionedResultsChange) -> Void, queue: dispatch_queue_t) -> RLMNotificationToken

    매개변수

    block

    변경이 발생할 때마다 호출되는 차단입니다.

    queue

    알림을 전달할 직렬 대기열입니다.

    반환 값

    업데이트가 전달되기를 원하는 기간 동안 보유해야 하는 토큰입니다.

  • 섹션화된 결과 컬렉션이 변경될 때마다 호출될 블록을 등록합니다.

    블록은 초기 섹션화된 결과 컬렉션과 비동기적으로 호출된 다음, 결과의 객체 또는 결과에 포함된 객체를 변경하는 각 쓰기 트랜잭션(write transaction) 후에 다시 호출됩니다.

    블록이 처음 호출될 때 change 매개변수는 nil 이(가) 됩니다. 그 이후의 각 호출에 대해 섹션의 어떤 행이 추가, 제거 또는 수정되었는지에 대한 정보가 포함됩니다. 쓰기 트랜잭션(write transaction)이 섹션의 객체를 수정하지 않은 경우 블록은 전혀 호출되지 않습니다. 변경 사항이 보고되는 방법과 UITableView 업데이트의 예에 대한 자세한 내용은 RLMSectionedResultsChange 설명서를 참조하세요.

    차단이 호출되면 RLMSectionedResults 객체는 완전히 평가된 최신 상태가 됩니다.

    알림은 표준 이벤트 루프를 통해 전달되므로 다른 활동으로 이벤트 루프가 차단된 동안에는 전달할 수 없습니다. 알림을 즉시 전달할 수 없는 경우 여러 알림이 단일 알림으로 병합될 수 있습니다. 여기에는 초기 결과에 대한 알림이 포함될 수 있습니다. 예를 들어 다음 코드는 알림 차단을 추가한 직후 쓰기 트랜잭션(write transaction)을 수행하므로 초기 알림이 먼저 전달될 기회가 없습니다. 결과적으로 초기 알림에는 쓰기 트랜잭션(write transaction) 후 Realm의 상태가 반영됩니다.

    RLM 결과 *results = [Dog allObjects]; RLM 섹션 결과 *sectionedResults = [resultssectionedResultsUsingKeyPath:@"age"ascending:예]; self.token = [sectionedResults addNotificationBlock:^(RLMSectionedResults *sectionedResults, RLMSectionedResultsChange *changes) { // 예제의 경우 한 번만 실행 NSLog(@"sectionedResults.count: %zu", SectionedResults.count); // => 1 }]; [realm transactionWithBlock:^{ Dog *dog = [[Dog alloc] init]; dog.name = @"Rex"; dog.age = 5; [realm addObject:dog]; }]; // 런 루프 실행 컨텍스트의 끝

    업데이트를 해당 블록에 계속 전송하려면 반환된 토큰을 오랫동안 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서 -invalidate 을 호출합니다.

    경고

    쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.

    경고

    대기열은 직렬 대기열이어야 합니다.

    참고

    키 경로로 필터링하면 다음 시나리오에서 알림이 실행됩니다.

    • 컬렉션의 객체가 필터링된 속성에서 수정되었습니다.
    • 섹션 키 경로 속성에 있는 객체가 수정되었으며 해당 수정 결과로 섹션에서의 위치가 변경되었거나 객체를 다른 섹션으로 이동해야 할 수 있습니다.
    • 관찰된 동일한 유형의 객체가 Realm에서 삽입되거나 삭제되었습니다.

    선언

    Objective-C

    - (nonnull RLMNotificationToken *)
        addNotificationBlock:
            (nonnull void (^)(
                RLMSectionedResults<RLMKeyType, RLMObjectType> *_Nonnull,
                RLMSectionedResultsChange *_Nonnull))block
                    keyPaths:(nonnull NSArray<NSString *> *)keyPaths;

    스위프트

    func addNotificationBlock(_ block: @escaping (RLMSectionedResults<RLMKeyType, RLMObjectType>, RLMSectionedResultsChange) -> Void, keyPaths: [String]) -> RLMNotificationToken

    매개변수

    block

    변경이 발생할 때마다 호출되는 차단입니다.

    keyPaths

    이러한 키 경로에서 발생하는 변경에 대해 차단이 호출됩니다. 키 경로가 제공되지 않으면 모든 속성 키 경로에 대해 알림이 전달됩니다.

    반환 값

    업데이트가 전달되기를 원하는 기간 동안 보유해야 하는 토큰입니다.

  • 섹션화된 결과 컬렉션이 변경될 때마다 호출될 블록을 등록합니다.

    블록은 초기 섹션화된 결과 컬렉션과 비동기적으로 호출된 다음, 결과의 객체 또는 결과에 포함된 객체를 변경하는 각 쓰기 트랜잭션(write transaction) 후에 다시 호출됩니다.

    블록이 처음 호출될 때 change 매개변수는 nil 이(가) 됩니다. 그 이후의 각 호출에 대해 섹션의 어떤 행이 추가, 제거 또는 수정되었는지에 대한 정보가 포함됩니다. 쓰기 트랜잭션(write transaction)이 섹션의 객체를 수정하지 않은 경우 블록은 전혀 호출되지 않습니다. 변경 사항이 보고되는 방법과 UITableView 업데이트의 예에 대한 자세한 내용은 RLMSectionedResultsChange 설명서를 참조하세요.

    차단이 호출되면 RLMSectionedResults 객체는 완전히 평가된 최신 상태가 됩니다.

    알림은 표준 이벤트 루프를 통해 전달되므로 다른 활동으로 이벤트 루프가 차단된 동안에는 전달할 수 없습니다. 알림을 즉시 전달할 수 없는 경우 여러 알림이 단일 알림으로 병합될 수 있습니다. 여기에는 초기 결과에 대한 알림이 포함될 수 있습니다. 예를 들어 다음 코드는 알림 차단을 추가한 직후 쓰기 트랜잭션(write transaction)을 수행하므로 초기 알림이 먼저 전달될 기회가 없습니다. 결과적으로 초기 알림에는 쓰기 트랜잭션(write transaction) 후 Realm의 상태가 반영됩니다.

    RLM 결과 *results = [Dog allObjects]; RLM 섹션 결과 *sectionedResults = [resultssectionedResultsUsingKeyPath:@"age"ascending:예]; self.token = [sectionedResults addNotificationBlock:^(RLMSectionedResults *sectionedResults, RLMSectionedResultsChange *changes) { // 예제의 경우 한 번만 실행 NSLog(@"sectionedResults.count: %zu", SectionedResults.count); // => 1 }]; [realm transactionWithBlock:^{ Dog *dog = [[Dog alloc] init]; dog.name = @"Rex"; dog.age = 5; [realm addObject:dog]; }]; // 런 루프 실행 컨텍스트의 끝

    업데이트를 해당 블록에 계속 전송하려면 반환된 토큰을 오랫동안 보관해야 합니다. 업데이트 수신을 중지하려면 토큰에서 -invalidate 을 호출합니다.

    경고

    쓰기 트랜잭션(write transaction) 중에는 또는 포함하는 Realm이 읽기 전용일 때 이 메서드를 호출할 수 없습니다.

    경고

    대기열은 직렬 대기열이어야 합니다.

    참고

    키 경로로 필터링하면 다음 시나리오에서 알림이 실행됩니다.

    • 컬렉션의 객체가 필터링된 속성에서 수정되었습니다.
    • 섹션 키 경로 속성에 있는 객체가 수정되었으며 해당 수정 결과로 섹션에서의 위치가 변경되었거나 객체를 다른 섹션으로 이동해야 할 수 있습니다.
    • 관찰된 동일한 유형의 객체가 Realm에서 삽입되거나 삭제되었습니다.

    선언

    Objective-C

    - (nonnull RLMNotificationToken *)
        addNotificationBlock:
            (nonnull void (^)(
                RLMSectionedResults<RLMKeyType, RLMObjectType> *_Nonnull,
                RLMSectionedResultsChange *_Nonnull))block
                    keyPaths:(nullable NSArray<NSString *> *)keyPaths
                       queue:(nullable dispatch_queue_t)queue;

    스위프트

    func addNotificationBlock(_ block: @escaping (RLMSectionedResults<RLMKeyType, RLMObjectType>, RLMSectionedResultsChange) -> Void, keyPaths: [String]?, queue: dispatch_queue_t?) -> RLMNotificationToken

    매개변수

    block

    변경이 발생할 때마다 호출되는 차단입니다.

    keyPaths

    이러한 키 경로에서 발생하는 변경에 대해 차단이 호출됩니다. 키 경로가 제공되지 않으면 모든 속성 키 경로에 대해 알림이 전달됩니다.

    queue

    알림을 전달할 직렬 대기열입니다.

    반환 값

    업데이트가 전달되기를 원하는 기간 동안 보유해야 하는 토큰입니다.