2014-06-12 16 views
13

Ho una "tabella" che può potenzialmente avere molti record, quando aggiungo un nuovo record ho bisogno di sapere quanti record ci sono già nella tabella corrente mentre lo uso nel calcolo di alcuni valori. La cosa più vicina che ho trovato richiede tutte le voci in questo modo:record conteggio CloudKit

var query : CKQuery = CKQuery(recordType: "Stars", predicate: NSPredicate(format: "mass > 0")) 
    var request : CKQueryOperation = CKQueryOperation(query: query) 
    var starCount = 0 

    request.queryCompletionBlock = { 
     (cursor:CKQueryCursor!, error:NSError!) in 
     if error { 
      completionHandler(ECOResponse.error(error.description), starCount) 
     } else { 
      completionHandler(ECOResponse.ok(), starCount) 
     } 
    } 

    request.recordFetchedBlock = { 
     (record:CKRecord!) in 
     starCount += 1 
    } 

auguro queryCompletionBlock ha dato un conteggio o risultati allineamento con CKQueryCursor, ma purtroppo non è così.

Esiste un altro modo per calcolare il numero di righe nella tabella?

+0

Probabilmente vorrai chiedere questo sui forum degli sviluppatori Apple. Penso che queste informazioni siano ancora private in base al contratto degli sviluppatori Apple. –

+0

Sfortunatamente non ci sono molte discussioni in corso riguardo a CloudKit. –

risposta

9

No, non è possibile ottenere il numero totale di record conformi alla query. Inoltre, enumerando il risultato, la risposta potrebbe essere sbagliata. Il numero di record restituiti da CloudKit non è stato corretto. CloudKit ha un meccanismo per decidere quanti record restituire. È possibile impostarlo su un numero fisso nell'oggetto CKQueryOperation. Il valore predefinito è:

operation.resultsLimit = CKQueryOperationMaximumResults; 

Le documentazioni per questa proprietà dice:

Quando si utilizza tale valore, il server sceglie un limite che mira a fornire un numero ottimale di risultati che restituisce come molti record possibili riducendo al minimo i ritardi nella ricezione di tali record. Tuttavia, se si sa che si desidera elaborare un numero fisso di risultati, modificare di conseguenza il valore di questa proprietà.

Se il conteggio è uguale a questo numero fisso, ci sono probabilmente più record di quelli restituiti dalla query.

+2

A volte quando si usa questa costante (che è 0 tra l'altro) ottengo l'errore malhal

+3

Anche a volte se dici di richiedere 1000 e fallisce, se usi il cursore e un limite di 100 per ottenere tutti i 1000. Se poi provi a riprendere tutti i 1000 in un colpo solo e poi ci riesce! Quindi il server deve essere in cache e consentire limiti maggiori se i record sono nella cache. – malhal

Problemi correlati