菜鸟教程小白 发表于 2022-12-11 22:42:55

ios - 如何找出 CloudKit 订阅何时被删除?


                                            <p><p>我在我的 iOS 应用程序中使用 CloudKit。</p>

<p>在我的应用程序中,每当用户修改某些数据时,我都会更新 CloudKit 私有(private)数据库,以便用户的其他设备也可以更新。</p>

<p>用户可以启用/禁用此同步机制。</p>

<p>当用户启用同步时,我创建订阅并将本地数据推送到 CloudKit。</p>

<p>如果用户已登录到其他设备,他们会按预期开始收到有关私有(private)数据库更改的远程通知。</p>

<p>应用程序显示一个 <code>UISwitch</code> 供用户启用/禁用同步。</p>

<p>让我们假设用户有 2 个设备 <code>DeviceA</code> 和 <code>DeviceB</code>,这表明通过将 <code>UISwitch.isOn</code> 设置为 true 已启用同步。 </p>

<p>如果用户在 <code>DeviceA</code> 上禁用同步,则订阅将被删除,并且在 <code>DeviceA</code> 上所做的更改不会触发对 <code>DeviceB</code> 的远程通知,因为预计。</p>

<p>但是<code>DeviceB</code>仍然显示同步已经开启。</p>

<p>有没有办法知道订阅何时被删除?</p>

<p>我知道<a href="https://developer.apple.com/documentation/cloudkit/ckfetchsubscriptionsoperation" rel="noreferrer noopener nofollow"><code>CKFetchSubscriptionsOperation</code></a> .我可以定期调用 <code>CKFetchSubscriptionsOperation</code> 来了解订阅。有没有更好的方法呢?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这是一个<strong>很好</strong>的问题,我也遇到过。你是对的。了解订阅状态的唯一方法是查询 <code>CKFetchSubscriptionsOperation</code> 可用的内容。</p>

<p>一种可能的解决方法是创建一个名为 <code>Subscription</code> 的 <code>recordType</code> 并将用户当前使用的 <code>subscriptionID</code> 保存为 <strong>常规 CloudKit 记录</strong>(只需在 <code>CKRecord</code> 上使用 <code>String</code> 属性)。</p>

<p>然后,当他们在设备上取消订阅时,您可以更新 <code>Subscription</code> 记录,他们的所有设备都会收到更改通知。然后,该应用会根据用户可用的 <code>subscriptionID</code> 更新 <em>实际</em> 订阅。</p>

<p>所以这是一个潜在的工作流程:</p>

<ol>
<li><code>DeviceA</code> 取消订阅 <code>subscription1</code>。</li>
<li><code>DeviceA</code> 从 <code>Subscription</code> 表中删除 <code>subscriptionRecord1</code>。</li>
<li><code>DeviceA</code> 使用 <code>CKModifySubscriptionsOperation()</code> 删除实际的 <code>subscription1</code> 订阅。</li>
<li><code>DeviceB</code> 收到通知 <code>subscriptionRecord1</code> 已删除并将同步 <code>UISwitch</code> 关闭(我假设您正在保存这些开关的状态本地持久化方法,如数据库或 <code>UserDefaults</code>)。</li>
</ol>

<p>希望这会有所帮助。如果您有任何问题,请告诉我。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何找出 CloudKit 订阅何时被删除?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/55741178/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/55741178/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何找出 CloudKit 订阅何时被删除?