我试图获取公共数据库中的更改通知:
CKServerChangeToken *token = [[cloudKitToken helper] getCloudKitToken];
CKFetchNotificationChangesOperation *op = [[CKFetchNotificationChangesOperation alloc]
initWithPreviousServerChangeToken:token];
NSMutableArray *noteIds = [[NSMutableArray alloc] init];
op.notificationChangedBlock = ^(CKNotification *note) {
CKNotificationID *noteId = note.notificationID;
[noteIds addObject:noteId];
};
op.fetchNotificationChangesCompletionBlock = ^(CKServerChangeToken *token, NSError *error) {
NSLog(@"error %@", error.localizedDescription);
};
[[CKContainer defaultContainer] addOperation:op];
但是当用户没有登录iCloud时,我收到此错误:"错误CloudKit访问被用户设置拒绝"
另一方面,使用相同的设备,我可以毫无问题地从公共数据库中获取记录。
我尝试使用CKFetchNotificationChangesOperation获取设备和cloudkit之间的增量。
你们中的任何人都知道如何在用户没有登录iCloud时获得增量吗?在这种情况下,获取记录是我唯一的选择吗?
我非常感谢你的帮助。
答案 0 :(得分:0)
使用CKFetchNotificationChangesOperation,您可以检索自上次提取以来发送给您的所有通知。这些通知链接到您先前为设备创建的订阅。订阅链接到一个帐户。因此,您必须使用同一帐户登录才能获取这些通知。
在您的情况下,使用CKFetchRecordChangesOperation可能会更好。然后,您将能够查询自上次查询以来的CloudKit更改。因为它只是使用“服务器更改令牌”的查询。第一次使用nil查询它然后检索所有记录。你会得到一个'服务器更改令牌'作为回报。只需将其保存在设备上,下次启动应用程序时只需使用该令牌即可。然后就没有必要登录iCloud了。 (如果您的数据是公开的)