RLMSectionedResults
Objective-C
@interface RLMSectionedResults<RLMKeyType : id <RLMValue>,
RLMObjectType : id <RLMValue>>
: NSObject <RLMSectionedResult>
Swift
@_nonSendable(_assumed) class RLMSectionedResults<RLMKeyType, RLMObjectType> : NSObject, RLMSectionedResult where RLMKeyType : RLMValue, RLMObjectType : RLMValue
一种延迟评估的集合,其中包含由部分键确定的部分中的元素。
-
分段结果collection中所有键的数组。
声明
Objective-C
@property (nonatomic) NSArray<RLMKeyType> *_Nonnull allKeys;
Swift
var allKeys: [RLMKeyType] { get set }
-
此集合中的节总数。
声明
Objective-C
@property (nonatomic, readonly) NSUInteger count;
Swift
var count: UInt { get }
-
返回给定索引处的部分。
声明
Objective-C
- (nonnull RLMSection<RLMKeyType, RLMObjectType> *)objectAtIndexedSubscript: (NSUInteger)index;
Swift
subscript(index: UInt) -> RLMSection<RLMKeyType, RLMObjectType> { get }
-
返回给定索引处的部分。
声明
Objective-C
- (nonnull RLMSection<RLMKeyType, RLMObjectType> *)objectAtIndex: (NSUInteger)index;
Swift
func object(at index: UInt) -> RLMSection<RLMKeyType, 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 }
-
注册一个区块,以便在每次分段结果集合发生更改时调用。
该区块将与初始分段结果集合一起异步调用,然后在每次写入事务后再次调用,这会更改结果中的任何对象或结果中的对象。
首次调用该区块时,
change
参数将为nil
。 对于此后的每次调用,它将包含有关在该部分中添加、删除或修改了哪些行的信息。 如果写事务未修改该部分中的任何对象,则根本不会调用该区块。 有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMSectionedResultsChange
文档。调用该区块时,
RLMSectionedResults
对象将被全面评估并保持最新状态。通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括带有初始结果的通知。 例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务(write transaction)后 Realm 的状态。
RLMResults
*results = [Dog allObjects]; RLMectionedResults *sectionedResults = [results sectionedResultsUsingKeyPath:@“age” ascending:YES]; 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;
Swift
func addNotificationBlock(_ block: @escaping (RLMSectionedResults<RLMKeyType, RLMObjectType>, RLMSectionedResultsChange) -> Void) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
返回值
只要您希望传递更新,就必须持有的令牌。
-
注册一个区块,以便在每次分段结果集合发生更改时调用。
该区块将与初始分段结果集合一起异步调用,然后在每次写入事务后再次调用,这会更改结果中的任何对象或结果中的对象。
首次调用该区块时,
change
参数将为nil
。 对于此后的每次调用,它将包含有关在该部分中添加、删除或修改了哪些行的信息。 如果写事务未修改该部分中的任何对象,则根本不会调用该区块。 有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMSectionedResultsChange
文档。调用该区块时,
RLMSectionedResults
对象将被全面评估并保持最新状态。通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括带有初始结果的通知。 例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务(write transaction)后 Realm 的状态。
RLMResults
*results = [Dog allObjects]; RLMectionedResults *sectionedResults = [results sectionedResultsUsingKeyPath:@“age” ascending:YES]; 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;
Swift
func addNotificationBlock(_ block: @escaping (RLMSectionedResults<RLMKeyType, RLMObjectType>, RLMSectionedResultsChange) -> Void, queue: dispatch_queue_t) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
queue
要向其传递通知的串行队列。
返回值
只要您希望传递更新,就必须持有的令牌。
-
注册一个区块,以便在每次分段结果集合发生更改时调用。
该区块将与初始分段结果集合一起异步调用,然后在每次写入事务后再次调用,这会更改结果中的任何对象或结果中的对象。
首次调用该区块时,
change
参数将为nil
。 对于此后的每次调用,它将包含有关在该部分中添加、删除或修改了哪些行的信息。 如果写事务未修改该部分中的任何对象,则根本不会调用该区块。 有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMSectionedResultsChange
文档。调用该区块时,
RLMSectionedResults
对象将被全面评估并保持最新状态。通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括带有初始结果的通知。 例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务(write transaction)后 Realm 的状态。
RLMResults
*results = [Dog allObjects]; RLMectionedResults *sectionedResults = [results sectionedResultsUsingKeyPath:@“age” ascending:YES]; 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;
Swift
func addNotificationBlock(_ block: @escaping (RLMSectionedResults<RLMKeyType, RLMObjectType>, RLMSectionedResultsChange) -> Void, keyPaths: [String]) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
keyPaths
这些键路径上发生的更改将调用该区块。 如果未给出键路径,则为每个属性键路径传递通知。
返回值
只要您希望传递更新,就必须持有的令牌。
-
注册一个区块,以便在每次分段结果集合发生更改时调用。
该区块将与初始分段结果集合一起异步调用,然后在每次写入事务后再次调用,这会更改结果中的任何对象或结果中的对象。
首次调用该区块时,
change
参数将为nil
。 对于此后的每次调用,它将包含有关在该部分中添加、删除或修改了哪些行的信息。 如果写事务未修改该部分中的任何对象,则根本不会调用该区块。 有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMSectionedResultsChange
文档。调用该区块时,
RLMSectionedResults
对象将被全面评估并保持最新状态。通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括带有初始结果的通知。 例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务(write transaction)后 Realm 的状态。
RLMResults
*results = [Dog allObjects]; RLMectionedResults *sectionedResults = [results sectionedResultsUsingKeyPath:@“age” ascending:YES]; 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;
Swift
func addNotificationBlock(_ block: @escaping (RLMSectionedResults<RLMKeyType, RLMObjectType>, RLMSectionedResultsChange) -> Void, keyPaths: [String]?, queue: dispatch_queue_t?) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
keyPaths
这些键路径上发生的更改将调用该区块。 如果未给出键路径,则为每个属性键路径传递通知。
queue
要向其传递通知的串行队列。
返回值
只要您希望传递更新,就必须持有的令牌。