Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在所有iCloud设备上安排警报(提醒)_Ios_Swift_Cloudkit_Unusernotificationcenter - Fatal编程技术网

Ios 在所有iCloud设备上安排警报(提醒)

Ios 在所有iCloud设备上安排警报(提醒),ios,swift,cloudkit,unusernotificationcenter,Ios,Swift,Cloudkit,Unusernotificationcenter,在我的应用程序中,用户可以在所有iCloud设备(核心数据+CloudKit)之间同步数据。 在这个应用程序中,我有一个提醒功能,我也想使用这个iCloud。 我使用apple Calendar应用程序进行了测试,并计划了一个提醒和此提醒提醒,该提醒是从所有iCloud设备(安装了该应用程序并接受通知)接收的 因此,我的问题是如何在所有iCloud设备上安排提醒: 我的想法是: 订阅privateDB的CloudKit容器更改,以便apple服务器在创建、更新和删除“任务”时向所有设备发送推送通

在我的应用程序中,用户可以在所有iCloud设备(核心数据+CloudKit)之间同步数据。 在这个应用程序中,我有一个提醒功能,我也想使用这个iCloud。 我使用apple Calendar应用程序进行了测试,并计划了一个提醒和此提醒提醒,该提醒是从所有iCloud设备(安装了该应用程序并接受通知)接收的 因此,我的问题是如何在所有iCloud设备上安排提醒:

我的想法是:

订阅privateDB的CloudKit容器更改,以便apple服务器在创建、更新和删除“任务”时向所有设备发送推送通知。 收到此静默通知后,应用程序将执行以下操作: -更新核心数据缓存以确保其已更新 -循环检查容器中的所有“任务”,并根据需要安排/取消本地通知

func应用程序(application:UIApplication,DidRegisterForRemotionTificationswithDeviceToken deviceToken:Data){
如果ICLOUD已启用{
让taskSubscription=CKQuerySubscription(记录类型:“CD_任务”,谓词:NSPredicate(值:true),subscriptionID:“taskSubscription”,选项:[CKQuerySubscription.options.firesOnRecordCreation、.firesOnRecordUpdate、.firesonrecorddeletation])
让notificationInfo=CKSubscription.notificationInfo()
notificationInfo.shouldSendContentAvailable=true
taskSubscription.notificationInfo=notificationInfo
CKContainer.default().privateCloudDatabase.save(taskSubscription,completionHandler:{\u0,错误在
如果错误==nil{
打印(“任务云订阅已成功保存”)
}否则{
打印(“出现任务云订阅错误:\(错误!.localizedDescription)”)
}
})
}
}
用于订阅更改的代码。(无声通知)

但我的做法不同,我想知道最优化的一个: 我可以在silentNotification userInfo中发送“Task”对象属性,以便在收到通知但设备未启动时,根据需要直接安排/取消任务。 通过这种方式,我不需要在更新本地缓存之前,但通知发送会更重,对吗? 有些“任务”不需要安排提醒,或者只是需要取消,所以有时候数据会被免费发送

我也应该注意一些事情: 如果用户在应用程序运行时启用iCloud(从apple设置应用程序),我应该查看是否需要安排本地通知。 如果用户启用userNotifications(从apple设置应用程序或在应用程序运行时),我应该查看是否需要再次安排本地通知

那你觉得怎么样?哪一个是最好的方法?也许有更好的办法