CloudKit订阅有时不起作用

时间:2014-09-29 05:10:48

标签: ios ios8 cloudkit cksubscription

如果我尝试使用以下代码订阅CloudKit:

    NSPredicate *truePredicate = [NSPredicate predicateWithValue:YES];
    CKSubscription *itemSubscription = [[CKSubscription alloc] initWithRecordType:RecordType
                                                                        predicate:truePredicate
                                                                          options:CKSubscriptionOptionsFiresOnRecordCreation | CKSubscriptionOptionsFiresOnRecordUpdate | CKSubscriptionOptionsFiresOnRecordDeletion];


    CKNotificationInfo *notification = [[CKNotificationInfo alloc] init];
    notification.alertBody = @"Item Added/Updated/Deleted!";
    itemSubscription.notificationInfo = notification;

    [self.publicDatabase saveSubscription:itemSubscription completionHandler:^(CKSubscription *subscription, NSError *error) {
        if (error) {
            // In your app, handle this error appropriately.
            NSLog(@"An error occured in %@: %@", NSStringFromSelector(_cmd), error);
        } else {

            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            [defaults setObject:subscription.subscriptionID forKey:kSubscriptionID];
            [defaults synchronize];
        }
    }];

我有时会收到此错误:

CKError 0x17558460:"服务器拒绝请求" (2000分之15); server message ="内部服务器错误&#34 ;; uuid = B89DE7A4-9D22-42BC-9CD4-4330F3FE04EF;容器ID =" iCloud.com.app.testApp"

CKError 0x14fb3510:"服务不可用" (二千〇二十二分之六);服务器消息="安装架构失败,CAS失败&#34 ;; uuid = F562D1AD-B40E-4842-A5EA-2A5F800C18F2;容器ID =" iCloud.com.app.testApp"

有人知道如何解决这个问题吗?我可以用我的代码做点什么吗?这是Apple的问题吗,我什么都做不了? 感谢。

3 个答案:

答案 0 :(得分:3)

我最近遇到了类似的错误,并且能够通过在项目的功能中切换CloudKit来解决它。一旦我重置了CloudKit权限,一切似乎都运行得很好。

答案 1 :(得分:1)

我遇到了完全相同的问题。我最终完全更换了容器(转到项目目标 - >功能 - >指定自定义容器 - >输入新的容器ID)。它之后运作得很好。

答案 2 :(得分:1)

我遇到了确切的错误:“服务器拒绝请求”(15/2000); server message =“内部服务器错误”,作为CKModifySubscriptionsOperation的结果。

使用iPad测试订阅的奇怪之处是好的。但是,从iPhone订阅不起作用。

通过更改NSPredicate格式修复它:

1-旧格式(不工作)

1-1:

让谓词= NSPredicate(格式:“rate> = 0”)

1-2:

让x = 0为!的NSNumber

让谓词= NSPredicate(格式:“rate> =”,x)

2-新谓词格式(修复了问题):

让谓词= NSPredicate(格式:“rate> =”,NSNumber(integerLiteral:0))