RLMSection
Objective-C
@interface RLMSection<RLMKeyType : id <RLMValue>, RLMObjectType>
: NSObject <RLMSectionedResult>
Swift
@_nonSendable(_assumed) class RLMSection<RLMKeyType, RLMObjectType> : NSObject, RLMSectionedResult where RLMKeyType : RLMValue, RLMObjectType : AnyObject
RLMSection 包含属于指定节键的对象。
-
代表此部分中的键的值。
声明
Objective-C
@property (nonatomic, readonly) RLMKeyType _Nonnull key;
Swift
var key: RLMKeyType { get }
-
该部分中对象的计数。
声明
Objective-C
@property (nonatomic, readonly) NSUInteger count;
Swift
var count: UInt { get }
-
返回该部分中给定索引的对象。
声明
Objective-C
- (nonnull RLMObjectType)objectAtIndexedSubscript:(NSUInteger)index;
Swift
subscript(index: UInt) -> RLMObjectType { get }
-
返回该部分中给定索引的对象。
声明
Objective-C
- (nonnull RLMObjectType)objectAtIndex:(NSUInteger)index;
Swift
func object(at index: UInt) -> RLMObjectType
-
返回此部分的冻结(不可变)快照。
冻结副本是一个不可变的部分,其中包含与此部分当前包含的数据相同的数据,但在写入包含的 Realm 时不会更新。 与活动数组不同,冻结集合可以从任何线程访问。
警告
在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。警告
在Realm上执行写事务(write transaction)时长时间持有冻结部分可能会导致Realm 文件变大。 有关更多信息,请参阅RLMRealmConfiguration.maximumNumberOfActiveVersions
。声明
Objective-C
- (nonnull instancetype)freeze;
Swift
func freeze() -> Self
-
返回此冻结部分的活动版本。
此方法解析对同一冻结部分的实时副本的引用。 如果在实时部分调用,则会返回自身。
声明
Objective-C
- (nonnull instancetype)thaw;
Swift
func thaw() -> Self
-
指示根本的部分是否已冻结。
冻结部分是不可变的,可以从任何线程访问。
声明
Objective-C
@property (nonatomic, readonly, getter=isFrozen) BOOL frozen;
Swift
var isFrozen: Bool { get }
-
注册一个区块,以便在每次该部分更改时调用。
该区块将与初始部分一起异步调用,然后在每次写事务(write transaction)后再次调用,这会更改结果中的任何对象或结果中的哪些对象。
首次调用该区块时,
change
参数将为nil
。 对于此后的每次调用,它将包含有关在该部分中添加、删除或修改了哪些行的信息。 如果写事务未修改该部分中的任何对象,则根本不会调用该区块。 有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMSectionedResultsChange
文档。调用该区块时,
RLMSection
对象将被全面评估并保持最新状态。通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括带有初始结果的通知。 例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务(write transaction)后 Realm 的状态。
RLMResults
*results = [Dog allObjects]; RLMectionedResults *sectionedResults = [results sectionedResultsUsingKeyPath:@“age” ascending:YES]; RLMSection *section = sectionedResults[ 0 ] // 包含年龄为“ 5 ”的狗的部分已经存在。 self.token = [section addNotificationBlock:^(RLMSection *section, RLMSectionedResultsChange *changes) { //示例中只触发一次 NSLog(@“section.count: %zu”, section.count); // => 2 }]; [域 transactionWithBlock:^{ Dog *dog = [[Dog alloc] init]; dog.name = @“Rex”; dog.age = 5 ; [域 addObject:dog]; }]; //运行循环执行上下文结束
只要您希望继续将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
-invalidate
。警告
在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。警告
该队列必须是串行队列。
声明
Objective-C
- (nonnull RLMNotificationToken *)addNotificationBlock: (nonnull void (^)(RLMSection<RLMKeyType, RLMObjectType> *_Nonnull, RLMSectionedResultsChange *_Nonnull))block;
Swift
func addNotificationBlock(_ block: @escaping (RLMSection<RLMKeyType, RLMObjectType>, RLMSectionedResultsChange) -> Void) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
返回值
只要您希望传递更新,就必须持有的令牌。
-
注册一个区块,以便在每次该部分更改时调用。
该区块将与初始部分一起异步调用,然后在每次写事务(write transaction)后再次调用,这会更改结果中的任何对象或结果中的哪些对象。
首次调用该区块时,
change
参数将为nil
。 对于此后的每次调用,它将包含有关在该部分中添加、删除或修改了哪些行的信息。 如果写事务未修改该部分中的任何对象,则根本不会调用该区块。 有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMSectionedResultsChange
文档。调用该区块时,
RLMSection
对象将被全面评估并保持最新状态。通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括带有初始结果的通知。 例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务(write transaction)后 Realm 的状态。
RLMResults
*results = [Dog allObjects]; RLMectionedResults *sectionedResults = [results sectionedResultsUsingKeyPath:@“age” ascending:YES]; RLMSection *section = sectionedResults[ 0 ] // 包含年龄为“ 5 ”的狗的部分已经存在。 self.token = [section addNotificationBlock:^(RLMSection *section, RLMSectionedResultsChange *changes) { //示例中只触发一次 NSLog(@“section.count: %zu”, section.count); // => 2 }]; [域 transactionWithBlock:^{ Dog *dog = [[Dog alloc] init]; dog.name = @“Rex”; dog.age = 5 ; [域 addObject:dog]; }]; //运行循环执行上下文结束
只要您希望继续将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
-invalidate
。警告
在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。警告
该队列必须是串行队列。
声明
Objective-C
- (nonnull RLMNotificationToken *) addNotificationBlock: (nonnull void (^)(RLMSection<RLMKeyType, RLMObjectType> *_Nonnull, RLMSectionedResultsChange *_Nonnull))block queue:(nonnull dispatch_queue_t)queue;
Swift
func addNotificationBlock(_ block: @escaping (RLMSection<RLMKeyType, RLMObjectType>, RLMSectionedResultsChange) -> Void, queue: dispatch_queue_t) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
queue
要向其传递通知的串行队列。
返回值
只要您希望传递更新,就必须持有的令牌。
-
注册一个区块,以便在每次该部分更改时调用。
该区块将与初始部分一起异步调用,然后在每次写事务(write transaction)后再次调用,这会更改结果中的任何对象或结果中的哪些对象。
首次调用该区块时,
change
参数将为nil
。 对于此后的每次调用,它将包含有关在该部分中添加、删除或修改了哪些行的信息。 如果写事务未修改该部分中的任何对象,则根本不会调用该区块。 有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMSectionedResultsChange
文档。调用该区块时,
RLMSection
对象将被全面评估并保持最新状态。通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括带有初始结果的通知。 例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务(write transaction)后 Realm 的状态。
RLMResults
*results = [Dog allObjects]; RLMectionedResults *sectionedResults = [results sectionedResultsUsingKeyPath:@“age” ascending:YES]; RLMSection *section = sectionedResults[ 0 ] // 包含年龄为“ 5 ”的狗的部分已经存在。 self.token = [section addNotificationBlock:^(RLMSection *section, RLMSectionedResultsChange *changes) { //示例中只触发一次 NSLog(@“section.count: %zu”, section.count); // => 2 }]; [域 transactionWithBlock:^{ Dog *dog = [[Dog alloc] init]; dog.name = @“Rex”; dog.age = 5 ; [域 addObject:dog]; }]; //运行循环执行上下文结束
只要您希望继续将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
-invalidate
。警告
在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。警告
该队列必须是串行队列。
注意
使用键路径筛选时,在以下情况下会触发通知:
- 已在筛选的属性中修改集合中的对象。
- 已在部分键路径属性上修改对象,并且该修改的结果已更改其在该部分中的位置,或者该对象可能需要移动到另一个部分。
- 已在Realm中插入或删除观察到的相同类型的对象。
声明
Objective-C
- (nonnull RLMNotificationToken *) addNotificationBlock: (nonnull void (^)(RLMSection<RLMKeyType, RLMObjectType> *_Nonnull, RLMSectionedResultsChange *_Nonnull))block keyPaths:(nonnull NSArray<NSString *> *)keyPaths;
Swift
func addNotificationBlock(_ block: @escaping (RLMSection<RLMKeyType, RLMObjectType>, RLMSectionedResultsChange) -> Void, keyPaths: [String]) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
keyPaths
这些键路径上发生的更改将调用该区块。 如果未给出键路径,则为每个属性键路径传递通知。
返回值
只要您希望传递更新,就必须持有的令牌。
-
注册一个区块,以便在每次该部分更改时调用。
该区块将与初始部分一起异步调用,然后在每次写事务(write transaction)后再次调用,这会更改结果中的任何对象或结果中的哪些对象。
首次调用该区块时,
change
参数将为nil
。 对于此后的每次调用,它将包含有关在该部分中添加、删除或修改了哪些行的信息。 如果写事务未修改该部分中的任何对象,则根本不会调用该区块。 有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMSectionedResultsChange
文档。调用该区块时,
RLMSection
对象将被全面评估并保持最新状态。通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括带有初始结果的通知。 例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务(write transaction)后 Realm 的状态。
RLMResults
*results = [Dog allObjects]; RLMectionedResults *sectionedResults = [results sectionedResultsUsingKeyPath:@“age” ascending:YES]; RLMSection *section = sectionedResults[ 0 ] // 包含年龄为“ 5 ”的狗的部分已经存在。 self.token = [section addNotificationBlock:^(RLMSection *section, RLMSectionedResultsChange *changes) { //示例中只触发一次 NSLog(@“section.count: %zu”, section.count); // => 2 }]; [域 transactionWithBlock:^{ Dog *dog = [[Dog alloc] init]; dog.name = @“Rex”; dog.age = 5 ; [域 addObject:dog]; }]; //运行循环执行上下文结束
只要您希望继续将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
-invalidate
。警告
在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。警告
该队列必须是串行队列。
注意
使用键路径筛选时,在以下情况下会触发通知:
- 已在筛选的属性中修改集合中的对象。
- 已在部分键路径属性上修改对象,并且该修改的结果已更改其在该部分中的位置,或者该对象可能需要移动到另一个部分。
- 已在Realm中插入或删除观察到的相同类型的对象。
声明
Objective-C
- (nonnull RLMNotificationToken *) addNotificationBlock: (nonnull void (^)(RLMSection<RLMKeyType, RLMObjectType> *_Nonnull, RLMSectionedResultsChange *_Nonnull))block keyPaths:(nullable NSArray<NSString *> *)keyPaths queue:(nullable dispatch_queue_t)queue;
Swift
func addNotificationBlock(_ block: @escaping (RLMSection<RLMKeyType, RLMObjectType>, RLMSectionedResultsChange) -> Void, keyPaths: [String]?, queue: dispatch_queue_t?) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
keyPaths
这些键路径上发生的更改将调用该区块。 如果未给出键路径,则为每个属性键路径传递通知。
queue
要向其传递通知的串行队列。
返回值
只要您希望传递更新,就必须持有的令牌。