CKQueryOperation queryCompletionBlock wird nur dreimal ausgeführt

Ich versuche, mit CloudKit und dem Cursor einen Stapel von Datensätzen aus meiner öffentlichen iCloud-Datenbank herunterzuladen. Der Code funktioniert einwandfrei für die ersten 3 Ausführungen, unabhängig davon, wie das resultsLimit gesetzt ist, aber der 4. Beendigungsblock wird niemals ausgeführt. Wenn resultsLimit nicht gesetzt ist, erhalte ich 300 Datensätze, wenn es auf 50 gesetzt ist, erhalte ich 150, wenn es auf 5 gesetzt ist, erhalte ich 15 ...

s wird kein Fehler gemeldet, und der Block scheint hinzugefügt zu werden, wird jedoch nie ausgeführt. Plattform ist OS X. Hier ist der fragliche Code:

        let queryOp = CKQueryOperation(query: query)
        queryOp.recordFetchedBlock = self.fetchedDetailRecord
        queryOp.resultsLimit = 5
        queryOp.queryCompletionBlock = { [weak self]
          (cursor: CKQueryCursor!, error: NSError!) -> Void in
          println("comp block called with \(cursor) \(error)")
          if error != nil {
            println("Error on fetch \(error.userInfo)")
          } else {
            if cursor != nil {
              let nextOp = CKQueryOperation(cursor: cursor)
              nextOp.recordFetchedBlock = self!.fetchedDetailRecord
              nextOp.queryCompletionBlock = queryOp.queryCompletionBlock
              nextOp.resultsLimit = 5
              self!.publicDatabase?.addOperation(nextOp)
              println("added next fetch")
            } else {
              self!.fileHandle!.closeFile()
              self!.exportProgressIndicator.stopAnimation(self)
            }
          }
        }

        self.publicDatabase?.addOperation(queryOp)

Und hier sind die Ergebnisse von der Konsole -

459013587628.012 0 459013587628,621 1 459013587628,863 2 459013587629,113 3 459013587629,339 4 comp genannte Block mit nil 459013587828,552 5 459013587828,954 6 459013587829,198 7 459013587829,421 8 459013587829,611 9 comp Block mit nil genannt 459013587997,084 10 459013587997,479 11 459013587997,74 12 459013587997,98 13 459013587998,207 14 nächsten Abruf hinzugefügt nächsten Abruf hinzugefügt

Die große Zahl gibt nur die Zeit zwischen den Aufrufen des recordFetchedBlock an. Die zweite Zahl gibt an, wie oft dieser Block aufgerufen wurde.

Ich bin ratlos ... irgendwelche Ideen, wie es weitergehen soll? Oh, container und publicDatabase sind Klassenvariablen und werden vor dem Ausführen des obigen Code-Snippets initialisiert.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage