我需要一种将CKQueryNotification连接到CKRecord或CKSubscription的方法,以便可以接收多种记录类型的更新/插入/删除。我已成功接收CKNotifications,这是有效载荷:
{
ck = {
ce = 2;
cid = "<my cloud container id>";
nid = "<unknown guid>";
qry = {
dbs = 2;
fo = 1;
rid = "<the record id>";
sid = "<THIS IS THE SUBSCRIPTION ID>";
zid = "_defaultZone";
zoid = "_defaultOwner";
};
};
}
我可以通过通知有效负载获取订阅ID,也可以将订阅ID绑定到知道记录类型的本地缓存,但是我想使用CKFetchNotificationChangesOperation来检索未读的通知,那时我只有CKQueryNotification对象。
CKQueryNotification对象只有一个CKRecordID,据我所知,我无法从CKRecordID获取CKRecord。我可以对容器中的所有CKRecord-> recordType执行查询,但这似乎不正确。
任何帮助表示赞赏!
最佳答案
如果收到推送通知,则应查看是否可以将其强制转换为CKQueryNotification。实际上,您应该调用-[CKDatabase fetchRecordWithID:completionHandler:]以获取完整的记录。然后,您可以使用.recordType查看它是哪种记录。
仅当您对同一recordType有多个订阅时,才有问题。您可以通过检查对象是否符合您用于该订阅的谓词来解决该问题。有关此信息,请参见predicate.evaluateWithObject方法。如果您具有CKReference的谓词,则不能使用它。
如果您想要一个有效的样本,那么可以看看:
https://github.com/evermeer/EVCloudKitDao
它具有其他一些不错的功能,例如自动从CKRecord解析到CKRecord以及在结果设备上进行缓存。
关于ios - 如何将CKQueryNotification连接到CKRecord或CKSubsription?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28316274/