RLMSyncSession

Objective-C


@interface RLMSyncSession : NSObject

迅速

@_nonSendable(_assumed) class RLMSyncSession : NSObject, @unchecked Sendable

封装 Atlas App Services“会话”的对象。 会话表示客户端(以及磁盘上的本地 Realm 文件)和服务器(以及存储在 Atlas App Services 上的具有给定分区值的远程 Realm)之间的通信。

会话始终由 SDK 创建并通过各种 API 发出。 与 Realm 关联的会话的生命周期是自动管理的。 可以从任何线程访问会话对象。

  • 会话的当前状态。

    此属性不符合 KVO 标准。

    声明

    Objective-C

    @property (nonatomic, readonly) RLMSyncSessionState state;

    迅速

    var state: RLMSyncSessionState { get }
  • 会话的当前连接状态。

    此属性符合 KVO 标准,可观察到变更并收到变更通知。请注意,可能会在背景线程上调用此属性的 KVO 观察器。

    声明

    Objective-C

    @property (readonly) RLMSyncConnectionState connectionState;

    迅速

    var connectionState: RLMSyncConnectionState { get }
  • 拥有此会话的用户。

    声明

    Objective-C

    - (nullable RLMUser *)parentUser;

    迅速

    func parentUser() -> RLMUser?
  • 如果会话有效,则返回同步配置,该配置可用于打开与此会话关联的 Realm。

    声明

    Objective-C

    - (nullable RLMSyncConfiguration *)configuration;

    迅速

    func configuration() -> RLMSyncConfiguration?
  • 暂时中止同步并断开与服务器的连接。

    在调用resume或关闭并重新打开 Realm 文件之前,该会话不会尝试连接到 Atlas App Services。

    声明

    Objective-C

    - (void)suspend;

    迅速

    func suspend()
  • 暂停后恢复同步并重新连接到 Atlas App Services。

    如果会话已处于活动状态或会话无效,则不执行此操作。 新创建的会话开始时处于“活动”状态,并且不需要恢复。

    声明

    Objective-C

    - (void)resume;

    迅速

    func resume()
  • 如果会话断开,则请求立即重新连接到服务器。

    断开连接后,Realm 会以指数退避算法自动重新连接,而当可访问性处理程序报告网络状态变更时,该退避算法会被重置。在某些情况下,应用程序可能希望跳过重新连接延迟,例如当应用程序收到“DidBecomeActive”通知时,可以通过调用此方法来完成。永远不需要调用此方法。

    此方法是异步方法,只是跳过当前的重新连接延迟,因此在调用该方法后,连接状态通常仍会立即断开。

    如果会话当前已连接,则无效。

    声明

    Objective-C

    - (void)reconnect;

    迅速

    func reconnect()
  • 已弃用

    请改用 addSyncProgressNotificationForDirection

    注册进度通知块。

    可以同时在同一个会话中注册多个区块。 每个区块都将在专门用于进度通知的侧队列上被调用。

    如果会话已从同步子系统收到进度信息,则将立即调用该区块。 否则,一旦进度信息可用,就会立即调用它。

    只要需要进度通知,就必须保留此方法返回的令牌;当不再需要通知时和销毁令牌之前,应对令牌调用-invalidate方法。

    如果没有返回令牌,则永远不会再次调用通知块。 造成这种情况的原因有很多。 如果会话以前遇到过致命错误,则它将不接受进度通知块。 如果该区块是在RLMSyncProgressForCurrentlyOutstandingWork模式下配置的,但没有其他进度可报告(例如,可传输字节数和已传输字节数相等),则不会再次调用该区块。

    声明

    Objective-C

    - (nullable RLMProgressNotificationToken *)
        addProgressNotificationForDirection:(RLMSyncProgressDirection)direction
                                       mode:(RLMSyncProgressMode)mode
                                      block:(nonnull RLMProgressNotificationBlock)
                                                block;

    参数

    direction

    要在此进度通知块中追踪的传输方向(上传或下载)。

    mode

    此进度通知块的所需行为。

    block

    通知可用时要调用的区块。

    返回值

    只要您希望发送通知,就必须持有的令牌。

  • 注册进度通知块。

    可以同时在同一个会话中注册多个区块。 每个区块都将在专门用于进度通知的侧队列上被调用。

    如果会话已从同步子系统收到进度信息,则将立即调用该区块。 否则,一旦进度信息可用,就会立即调用它。

    只要需要进度通知,就必须保留此方法返回的令牌;当不再需要通知时和销毁令牌之前,应对令牌调用-invalidate方法。

    如果没有返回令牌,则永远不会再次调用通知块。 造成这种情况的原因有很多。 如果会话以前遇到过致命错误,则它将不接受进度通知块。 如果该区块是在RLMSyncProgressForCurrentlyOutstandingWork模式下配置的,但没有其他进度可报告(例如,可传输字节数和已传输字节数相等),则不会再次调用该区块。

    声明

    Objective-C

    - (nullable RLMProgressNotificationToken *)
        addSyncProgressNotificationForDirection:(RLMSyncProgressDirection)direction
                                           mode:(RLMSyncProgressMode)mode
                                          block:
                                              (nonnull
                                                   RLMSyncProgressNotificationBlock)
                                                  block;

    参数

    direction

    要在此进度通知块中追踪的传输方向(上传或下载)。

    mode

    此进度通知块的所需行为。

    block

    通知可用时要调用的区块。

    返回值

    只要您希望发送通知,就必须持有的令牌。

  • 等待待处理的上传完成或会话过期,然后将回调分派到指定队列。

    声明

    Objective-C

    - (BOOL)waitForUploadCompletionOnQueue:(nullable dispatch_queue_t)queue
                                  callback:(nonnull void (^)(NSError *_Nullable))
                                               callback;
  • 等待挂起的下载完成或会话过期,并将回调分派到指定队列。

    声明

    Objective-C

    - (BOOL)waitForDownloadCompletionOnQueue:(nullable dispatch_queue_t)queue
                                    callback:(nonnull void (^)(NSError *_Nullable))
                                                 callback;
  • 给定错误操作令牌,立即处理相应的操作。

    ` RLMSyncErrorClientResetError , RLMSyncErrorPermissionDeniedError

    声明

    Objective-C

    + (void)immediatelyHandleError:(nonnull RLMSyncErrorActionToken *)token;

    迅速

    class func immediatelyHandleError(_ token: RLMSyncErrorActionToken)
  • 如果给定 Realm 是同步 Realm,则获取该 Realm 的同步会话;如果不是同步 Realm,则获取nil

    声明

    Objective-C

    + (nullable RLMSyncSession *)sessionForRealm:(nonnull RLMRealm *)realm;

    迅速

    /*not inherited*/ init?(for realm: RLMRealm)