swift - Swift:CloudKit 订阅 firesOnRecordCreation 未按预期调用
问题描述
这是我的订阅方法注册
public func RegisterForSubscription(completion: @escaping (Result<CKSubscription, Error>) -> Swift.Void) {
let subscription = CKQuerySubscription(recordType: Film.RecordType, predicate: NSPredicate(value: true), options: [.firesOnRecordCreation, .firesOnRecordDeletion, .firesOnRecordUpdate])
let notificationInfo = CKSubscription.NotificationInfo()
notificationInfo.shouldSendContentAvailable = true
subscription.notificationInfo = notificationInfo
database.save(subscription) { savedSubscription, error in
if let error = error {
print("Subscription error: \(error.localizedDescription)")
completion(.failure(error))
return
}
if let savedSubscription = savedSubscription {
completion(.success(savedSubscription))
return
}
}
}
现在我所关心的.firesOnRecordCreation
只是为了调试目的,我添加了所有三个选项。
当我尝试添加(保存)新记录时,它成功地将它们添加到 CloudKit。这是方法
public func save(film: Film, completion: @escaping (Result<CKRecord, Error>) -> Swift.Void) {
let filmRecord = film.toRecord()
let operation = CKModifyRecordsOperation(recordsToSave: [filmRecord], recordIDsToDelete: nil)
operation.qualityOfService = .userInitiated
operation.completionBlock = {
completion(.success(filmRecord))
}
database.add(operation)
}
和我的.toRecord()
方法:
public func toRecord() -> CKRecord {
let record = self.record ?? CKRecord(recordType: Self.RecordType)
record[RecordKeys.id.rawValue] = id
record[RecordKeys.title.rawValue] = title
record[RecordKeys.filmDescription.rawValue] = filmDescription
record[RecordKeys.image.rawValue] = image
record[RecordKeys.director.rawValue] = director
record[RecordKeys.producer.rawValue] = producer
record[RecordKeys.releaseDate.rawValue] = releaseDate
record[RecordKeys.rtScore.rawValue] = rtScore
record[RecordKeys.imdbLink.rawValue] = imdbLink
record[RecordKeys.imdbScore.rawValue] = imdbScore
return record
}
一切正常。但是,我想注册订阅(静默通知)以在用户添加新记录(电影)时检测实时更改。
问题是,每当我通过该方法添加(调用保存方法)时,它都不会触发该.firesOnRecordCreation
选项。但是,其他两个工作。我通过 CloudKit 仪表板更新了其中一个属性并删除了它们,它被称为(在 appDelegate 上didReceiveRemoteNotification
)
我究竟做错了什么?当用户从方法(不是 VIA 仪表板)添加新电影时,它应该触发它,但在这种情况下不是。
编辑:
通过仪表板添加触发订阅。但不是在使用该方法时。
解决方案
推荐阅读
- microsoft-graph-api - 对 Graph Api 使用用户名-密码流是否安全?此流是否属于 Oauth 实现
- sql-server - 创建存储过程以将数据从 stage_table 移动到 fact_table
- spring-batch - 使用spring批处理将xml划分为小xml
- java - Servelt 页面不使用 Servlet 重定向到第二个页面
- c# - MVC 自定义构造函数从未命中
- python - 将参数列表发送到 Python 类中的函数的最佳方法是什么?
- javascript - 导航到特定的主列表项 sapui5
- java - 添加折线以映射错误无法解决:Ljava/time/ZonedDateTime
- laravel - Laravel - 如何使课程总分不超过课程最高分
- typescript - jest+supertest 对向其他端点发出 HTTP 请求的 API 端点进行 e2e 测试