2014-09-29 7 views
7

Se provo sottoscrivere CloudKit con questo codice:abbonamento CloudKit a volte non funziona

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]; 
     } 
    }]; 

volte ottengo questo errore:

CKError 0x17558460: "Server ha respinto la richiesta" (15/2000); messaggio server = "Errore interno del server"; uuid = B89DE7A4-9D22-42BC-9CD4-4330F3FE04EF; Contenitore ID = "iCloud.com.app.testApp"

o

CKError 0x14fb3510: "Servizio non disponibile" (6/2022); messaggio server = "impossibile installare lo schema, CAS fallito"; uuid = F562D1AD-B40E-4842-A5EA-2A5F800C18F2; ID contenitore = "iCloud.com.app.testApp"

Qualcuno sa come risolvere il problema? Posso fare qualcosa con il mio codice? Questo è un problema di Apple e non posso fare nulla? Grazie.

+0

Ho avuto il primo errore in precedenza, dove appare improvvisamente per alcune ore, e se ne è andato dopo. Questo era un problema con il server di Apple. Ma se il problema non scompare, probabilmente è tuo. – honcheng

+0

per il secondo errore, hai già creato il tipo di record prima di iscriverti ad esso? – honcheng

+0

sì, ho il tipo di registrazione. –

risposta

1

Ho avuto lo stesso identico problema. Ho finito per cambiare completamente i contenitori (goto target del progetto -> Funzionalità -> specifica contenitori personalizzati -> inserisci un nuovo ID contenitore). Ha funzionato perfettamente dopo.

+0

Pensi che il tutto nel contenitore predefinito? –

+8

Non sono sicuro di cosa stai chiedendo. – ninjaneer

3

Recentemente ho ricevuto un errore simile ed è stato in grado di risolverlo attivando CloudKit nelle funzionalità del progetto. Una volta resettato il permesso di CloudKit, tutto sembrava funzionare bene.

+0

Avevo lo stesso problema e mentre un nuovo contenitore non lo risolveva, questo suggerimento sembrava risolvere il problema. Tuttavia, il problema è tornato alcune volte. Potrei provare a creare un progetto Xcode pulito. – coping

+0

Questo ha anche risolto un problema CKInternalErrorDomain in qualche modo simile sullo schema che non corrisponde al server. – Thunk

1

Ho avuto errore esatto: "Richiesta di rifiuto server" (15/2000); messaggio server = "Errore interno del server" come risultato di CKModifySubscriptionsOperation.

Strana cosa che testare l'abbonamento con iPad è stato Ok. ma, l'abbonamento da iPhone non ha funzionato.

è stato risolto modificando il formato NSPredicate:

1- vecchio formato (non funzionante)

1-1:

let predicato = NSPredicate (formato: "tasso di> = 0")

1-2:

let x = 0 as! NSNumber

let predicato = NSPredicate (formato: "rate> =", x)

2- formato Nuovo predicato (risolto il problema):

let predicato = NSPredicate (formato: "tasso di> = ", NSNumber (interoLiteral: 0))

+0

La domanda era chiedere Objective-C. Puoi rivedere la tua risposta? – Jerry