Ios 当用户未登录时,用户设置拒绝访问CloudKit时出错

Ios 当用户未登录时,用户设置拒绝访问CloudKit时出错,ios,xcode6,icloud,cloudkit,Ios,Xcode6,Icloud,Cloudkit,我正在尝试获取公共数据库中的更改通知: CKServerChangeToken *token = [[cloudKitToken helper] getCloudKitToken]; CKFetchNotificationChangesOperation *op = [[CKFetchNotificationChangesOperation alloc] initWithPreviousServerChange

我正在尝试获取公共数据库中的更改通知:

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访问被用户设置拒绝”

另一方面,使用同一台设备,我可以毫无问题地从公共数据库中获取记录

我尝试使用ckFetchNotificationChanges操作来获取设备和cloudkit之间的增量

你们中的任何人都知道,当用户没有登录到iCloud?时,如何获取增量?对于这种情况,获取记录是我唯一的选择吗


我非常感谢你的帮助

使用ckFetchNotificationChanges操作,您可以检索自上次提取以来发送给您的所有通知。这些通知链接到以前为设备创建的订阅。订阅链接到一个帐户。因此,您必须使用相同的帐户登录才能获取这些通知

在您的情况下,使用CKFetchRecordChangesOperation可能会更好。然后,您将能够只查询自上一次查询以来的CloudKit更改。因为它只是一个使用“服务器更改令牌”的查询。第一次可以使用nil查询它,然后检索所有记录。您将得到一个“服务器更改令牌”作为回报。只需将其保存在设备上,下次启动应用程序时只需使用该令牌即可。那么就不需要登录iCloud了。(如果您的数据是公开的)