- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
CKSubscription
文档说:当记录修改导致订阅触发时,服务器会向所有订阅该订阅的设备发送推送通知,但进行原始更改的设备除外 记录。
假设我有两台设备:device 1
和 device 2
从不同的 iCloud 帐户登录。假设两个设备都订阅了某种记录类型的记录删除。
device 1
创建了一条记录,然后 device 1
删除了它,然后 device 2
得到通知 - 这是根据文档,但是..device 1
创建了一条记录,然后 device 2
删除了它,那么 device 2
会收到通知 - 我不认为这是根据该文档没有任何意义,device 2
删除了它,因此应通知 device 1
在设备 1 和设备 2 上设置订阅
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert, categories: nil))
application.registerForRemoteNotifications()
let defaultContainer = CKContainer.defaultContainer()
let publicDatabase = defaultContainer.publicCloudDatabase
publicDatabase.fetchAllSubscriptionsWithCompletionHandler({subscriptions, error in
if error == nil {
if subscriptions.count == 0 {
let subscription = CKSubscription(recordType: "OU", predicate: NSPredicate(value: true), options: .FiresOnRecordDeletion)
subscription.notificationInfo = CKNotificationInfo()
subscription.notificationInfo.shouldBadge = false
subscription.notificationInfo.alertBody = "OU removed or upated"
publicDatabase.saveSubscription(subscription, completionHandler: {subscription, error in
if error == nil {
} else {
println("\(error.localizedDescription)")
}
})
}
} else {
println("\(error.localizedDescription)")
}
})
return true
}
在设备 1 上创建记录
@IBAction func addOU(sender: AnyObject) {
var defaultContainer = CKContainer.defaultContainer()
var publicDatabase = defaultContainer.publicCloudDatabase
let r = CKRecord(recordType: "OU", recordID: CKRecordID(recordName: "aaaa"))
publicDatabase.saveRecord(r, completionHandler: { r2, error in
if error == nil {
} else {
println("\(error.localizedDescription)")
}
})
}
删除设备 2 上的记录
@IBAction func removeOU(sender: AnyObject) {
var defaultContainer = CKContainer.defaultContainer()
var publicDatabase = defaultContainer.publicCloudDatabase
publicDatabase.deleteRecordWithID(CKRecordID(recordName: "aaaa"), completionHandler: {recordID, error in
if error == nil {
} else {
println("\(error.localizedDescription)")
}
})
}
最佳答案
我仍然认为 CKSubscription
的工作原理毫无意义,但作为临时修复,我建议先更改 CKRecord
的 lastModifiedUserRecordID
给想要删除记录的用户,然后才删除记录。
要更改 lastModifiedUserRecordID
,您必须获取它并且不做任何操作将其保存回来,然后可以删除:
@IBAction func removeOU(sender: AnyObject) {
var defaultContainer = CKContainer.defaultContainer()
var publicDatabase = defaultContainer.publicCloudDatabase
publicDatabase.fetchRecordWithID(CKRecordID(recordName: "aaaa"), completionHandler: {record, error in
if error == nil {
publicDatabase.saveRecord(record, completionHandler: {record2, error in
if error == nil {
publicDatabase.deleteRecordWithID(CKRecordID(recordName: "aaaa"), completionHandler: {recordID, error in
if error == nil {
} else {
println("\(error.localizedDescription)")
}
})
} else {
println("\(error.localizedDescription)")
}
})
} else {
println("\(error.localizedDescription)")
}
})
}
关于ios - 通过 CKSubscription 观察 CKRecord 删除不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25822019/
我正在尝试使用 CKSubscription这边走: NSArray *events = @[@1,@2,@3]; NSInteger myValue = 100; NSPredicate *pred
目前,您必须拥有用户授予的通知权限: UIApplication *application = [UIApplication sharedApplication]; UIUserNotificatio
我可以使用 CKNotificationInfo() 和 CKNotificationInfo.alertBody 让 CKSubscription 工作。所以我可以发送一条信息。我试图让 CKSub
我今天一直在摆弄CKSubscription。我对此有一些疑问。 我这样设置我的订阅: -(void)addSubscriptions { NSPredicate *predicate = [
我正在使用 CloudKit 编写一个 Swift 应用程序。当设备在 CloudKit 中修改记录时,我希望在不显示推送通知的情况下在其他设备的本地存储中更新相应的记录。 即使我不打算显示任何推送,
我想通知用户一条聊天消息已从其他用户发送,通知的正文应该是消息。是否可以通过 CKSubscription/CKNotificationInfo 进行设置?类似于 alertBody,但特定于每条消息
我使用以下代码设置了一个 CKSubscription: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"TRUEPREDICA
几周来我一直在阅读有关 CKSubscription 功能的文章并尝试使用它,但我找不到关于一些一般问题的信息。我已经阅读了 Apple 文档、在线教程、我购买的书籍以及关于 SO 的问题,但我仍然不
我有一个在 TvOS 下运行的 CKSubscription,当订阅触发时,它会返回此用户信息对象,这很棒。但我该如何在 Swift 中解析这个,当然不是通过制作我自己的解析例程? userInfo
如何检查使用 CKAsset 存储的图像在 CloudKit 中是否发生了变化? CKNotification 文档说了 desiredKeys: 数组中最多可以包含三个键。 对于您指定的键,允许的值
我将表的 CKSubscription 设置为“在创建记录时触发”。当我需要更新 CKSubscription 的特定实例时,我确保在添加它之前先将其删除。 但现在每当我保存新的 CKRecord 时
很抱歉,我找不到通俗易懂的英语答案,或者至少我看到的每个答案都假设我拥有一定数量的知识,而这些知识是我不应该拥有的。我只需要删除一个 CKSubscription。我该怎么做呢?非常感谢所有提示和帮助
我有这个代码。这在使用 FiresOnRecordCreation 的触发模式创建订阅时有效......但在 FiresOnce 上出错......错误是“查询订阅必须至少有一种类型的触发模式” 我的
CKSubscription 文档说:当记录修改导致订阅触发时,服务器会向所有订阅该订阅的设备发送推送通知,但进行原始更改的设备除外 记录。 假设我有两台设备:device 1 和 device 2
我正在构建一个需要订阅 iCloud 公共(public)数据库中记录更改的应用程序。现在,在观看了苹果视频并阅读了他们的文档之后,我决定开始工作。但是,我立即被困在这里: CKSubScriptio
我在没有经过身份验证的 iCloud 帐户的情况下测试我的应用程序,但在为设备订阅通知时出现此错误: subscription error 没关系,但我的问题是如何在尝试运行 CKSubscript
所以我遇到了一个 CloudKit 错误,当我搜索它时只得到一个 (1) Google 结果。运行 CKModifySubscriptionsOperation 以创建初始用户的 CK 订阅时出现错误
我是一名优秀的程序员,十分优秀!