2016-08-10 17 views
1

レコードをフェッチする方法は多岐に渡り、stackoverflowで同じ問題をチェックしましたが、100を超えるレコードをフェッチすることはできません。CloudKitに100を超えるレコードを含めることはできません

以前は、CKQueryOperationの代わりにCKQueryを使用して、resultsLimitパラメータを使用していました。ここで

は私のコードです:iOSの9.3には、あなたが複数のフェッチ操作を実行するためにCKQueryCursorを使用して、フェッチ中にいたところを追跡する必要があります以下

func initData(){ 
     // show activity indicator 
     self.activityIndicatorView.hidden = false 
     // hide connection error button 
     self.connectionErrorButton.hidden = true 

     let container = CKContainer.defaultContainer() 
     let publicDB = container.publicCloudDatabase 

     let predicate = NSPredicate(value: true) 
     let sort = NSSortDescriptor(key: "id", ascending: true) 

     var newInfo = Array<CKRecord>() 

     let query = CKQuery(recordType: "info", predicate: predicate) 
     query.sortDescriptors = [sort] 

     let queryOperation = CKQueryOperation(query: query) 
     queryOperation.queuePriority = .VeryHigh 
     queryOperation.resultsLimit = 150; 

     // Fetch the pokemons for the record 
     func fetched(record: CKRecord!) { 
      newInfo.append(record) 
     } 

     queryOperation.recordFetchedBlock = fetched 

     queryOperation.queryCompletionBlock = { [unowned self] (cursor, error) in 
      if (error != nil) { 
       dispatch_async(dispatch_get_main_queue()) { 
        self.connectionErrorButton.hidden = false 
        self.activityIndicatorView.hidden = true 
        return 
       } 
      } else { 
       dispatch_async(dispatch_get_main_queue()) { 
        self.infos.removeAll() 
        self.infos = newInfo 
        self.tableView.reloadData() 
        self.activityIndicatorView.hidden = true 
        return 
       } 
      } 
     } 
     publicDB.addOperation(queryOperation) 
    } 

答えて

1

。完了ブロックに戻されてしまったカーソルオブジェクトは厥、あなたがそうのようにそれをしたところ、オフピックアップしますそれで別の操作を作成することができます。

queryOperation.queryCompletionBlock = { (cursor, error) in 
    if let cursor = cursor { 
     let cursorOperation = CKQueryOperation(cursor: cursor) 
     cursorOperation.queryCompletionBlock = //Handle it again 
    } 
    //Do stuff 
} 

多くの場合、あなたは時に再利用可能なハンドラのブロックを作りたいですよ複数のカーソルがある場合は、カーソルベースのクエリ操作を再帰的に作成することができます。

+0

iOS 10でこの変更の参考になっていますか? – breakingobstacles

+0

@breakingobstacles fetchAllChangesを検索します。http://asciiwwdc.com/2016/sessions/231 – Luke

+0

fetchAllChangesは、レコード/データベースの変更を取得する新しい操作(例:[CKFetchDatabaseChangesOperation](https:// developer)のみ)で利用できます。 apple.com/reference/cloudkit/ckfetchdatabasechangesoperation))、** CKQueryOperationの**クエリではありません。 [新しいドキュメント](https://developer.apple.com/reference/cloudkit/ckqueryoperation)にはCKQueryOperationに変更はなく、あなたが引用したリンクにそのような参照はありません。 – breakingobstacles

関連する問題