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

时间:2015-05-22 18:27:26

标签: ios xcode6 icloud cloudkit

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

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时获得增量吗?在这种情况下,获取记录是我唯一的选择吗?

我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

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

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