2016-03-26 14 views
10

Sto tentando di utilizzare CKQueryOperation, piuttosto che performQuery sul mio database CloudKit.CKQueryOperation non restituisce un errore quando il dispositivo è offline

Entrambi i lavori, ma quando si utilizza un CKQueryOperation non sto ottenendo un errore quando il dispositivo non è in linea, ma io quando si utilizza performQuery

Ecco le ossa nude mia performQuery esempio, database è il mio CKDatabase

database.performQuery(q, inZoneWithID: nil) { (records:[CKRecord]?, error:NSError?) in 
    if error != nil { 
     print(error!.localizedDescription) 
     return 
    } 
} 

Viene visualizzato un errore quando il dispositivo è offline, consentendomi di richiedere all'utente. L'errore è

The internet connection appears to be offline

Tuttavia, ottengo nessun errore quando uso un CKQueryOperation

let p = NSPredicate(format:"recordID IN %@", student.courses) 
let q = CKQuery(recordType: String(Course), predicate: p) 

let queryOperation = CKQueryOperation(query: q) 

queryOperation.recordFetchedBlock = { record in 
    // not called without network connection - doesn't enter scope 
    print(record) 
} 


queryOperation.queryCompletionBlock = { (cursor: CKQueryCursor?, error: NSError?) in 
    // not called without network connection - doesn't enter scope 
    print(cursor) 
    print(error) 
} 

database.addOperation(queryOperation) 

Con una connessione ricevo i miei dati per entrambi i metodi in modo che funzioni come previsto.

Come/dove sono informato dell'errore quando si utilizza CKQueryOperation?

Grazie

risposta

8

Come al solito vi posto una taglia e trovare la risposta entro la prossima ora o Non 2. sicuro di come ho perso this in origine, ma che conteneva la risposta che cercavo.

Quindi con l'aggiunta di questa linea

queryOperation.qualityOfService = .UserInitiated 

qualcosa dietro le quinte modifiche e abbiamo qualche bella azione all'interno

queryOperation.queryCompletionBlock = { (cursor: CKQueryCursor?, error: NSError?) in 
    // We get an error message... Finally !! 
    print(error) 
} 

non ho trovato nulla in Apple Documenti alludere a questa operazione.

+0

Ho anche trovato che il valore predefinito di operationouttimevaloreForResource' è 7 giorni ... Quindi potrebbe richiedere una settimana prima di rinunciare alla richiesta, anche se sembra sciocco. L'ho cambiato in 6 secondi e voilá –