2014-09-29 139 views
7

如果我嘗試訂閱CloudKit與此代碼: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);服務器消息=「內部服務器錯誤」; uuid = B89DE7A4-9D22-42BC-9CD4-4330F3FE04EF;容器ID = 「iCloud.com.app.testApp」

CKError 0x14fb3510: 「服務不可用」(二千〇二十二分之六);服務器消息=「安裝模式失敗,CAS失敗」; uuid = F562D1AD-B40E-4842-A5EA-2A5F800C18F2;容器ID =「iCloud.com.app.testApp」

任何人都知道如何解決這個問題?我可以用我的代碼做些什麼嗎?這是蘋果的問題,我什麼都不能做? 謝謝。

+0

我以前有過第一個錯誤,突然出現幾個小時,然後就離開了。這是蘋果服務器的問題。但如果問題沒有消失,那麼它可能是你的。 – honcheng 2014-09-29 09:50:55

+0

第二個錯誤,您是否已經在訂閱它之前創建了記錄類型? – honcheng 2014-09-29 09:51:26

+0

是的,我有記錄類型。 – 2014-09-29 10:23:53

回答

1

我有完全相同的問題。我最終完全更改了容器(轉到項目目標 - >功能 - >指定自定義容器 - >輸入新的容器ID)。它完美后工作。

+0

你認爲整個事物在默認容器中嗎? – 2014-10-20 03:38:08

+8

我不確定你在問什麼。 – ninjaneer 2014-10-20 07:31:17

3

我剛剛得到了一個類似的錯誤,並且能夠通過在項目功能中切換CloudKit來解決它。一旦我重置了CloudKit權限,似乎都可以正常工作。

+0

我有同樣的問題,雖然一個新的容器沒有修復它,但這個建議似乎解決了它。但是,問題已經回來了幾次。我可能會嘗試創建一個乾淨的Xcode項目。 – coping 2016-01-28 02:05:36

+0

這也解決了一個有關CKInternalErrorDomain抱怨有關模式不匹配的服務器。 – Thunk 2016-11-06 16:28:19

1

我有確切的錯誤:「Server Rejected Request」(15/2000);服務器消息= CKModifySubscriptionsOperation導致的「內部服務器錯誤」。

奇怪的是,用iPad測試訂閱是好的。但是,從iPhone訂閱不起作用。

1-舊格式(不工作)

1-1:

通過改變NSPredicate格式固定它

設謂詞= NSPredicate(格式爲: 「速率> = 0」)

1-2:

let x = 0 as!的NSNumber

設謂詞= NSPredicate(格式爲: 「率> =」,x)的

2-新謂詞格式(固定的問題):

設謂詞= NSPredicate(格式爲:「率> = 「,NSNumber(integerLiteral:0))

+0

問題是要求Objective-C。你能修改你的答案嗎? – Jerry 2016-12-25 12:55:35