8

で返される結果の量を制限する方法はありますCKQueryか?

ではSQL、 のようなクエリを実行できますSELECT * FROM Posts LIMIT 10,15LIMIT 10,15CloudKitで、クエリの最後の部分のようなものはありますか?

たとえば、最初の 5 つの結果を読み込み、ユーザーが下にスクロールしたら、次の 5 つの結果を読み込みたいとします。SQL では、LIMIT 0,5、次にLIMIT 6,10などになります。

うまくいくことの1つはループを使用することforですが、iCloudからすべての値を選択し、それらをループしてどの5つを選択するかを判断する必要があるため、非常に集中的です。データベースにはさまざまな投稿があるため、必要なものだけをロードしたいと思います。

私はこのようなものを探しています:

var limit: NSLimitDescriptor = NSLimitDescriptor(5, 10)
query.limit = limit

CKContainer.defaultContainer().publicCloudDatabase.addOperation(CKQueryOperation(query: query)
//fetch values and return them
4

1 に答える 1

10

CKQueryに提出しますCKQueryOperation。には とのCKQueryOperation概念がcursorありresultsLimitます。クエリ結果をまとめることができます。ドキュメントで説明されているように:

新しい検索を実行するには:

1) 必要なレコードの検索基準とソート情報を含む CKQuery オブジェクトで CKQueryOperation オブジェクトを初期化します。

2) 結果を処理して操作を実行できるように、ブロックを queryCompletionBlock プロパティに割り当てます。

検索で多くのレコードが得られる場合、操作オブジェクトは、残りのレコードを取得するためのカーソルとともに、合計結果の一部をブロックにすぐに配信する場合があります。カーソルが提供されている場合は、結果の次のバッチを処理する準備が整ったときに、それを使用して個別の CKQueryOperation オブジェクトを初期化および実行します。

3) オプションで、resultLimit および desiredKeys プロパティの値を指定して、返される結果を構成します。

4) クエリ操作オブジェクトをターゲット データベースの addOperation: メソッドに渡し、そのデータベースに対して操作を実行します。

したがって、次のようになります。

var q   = CKQuery(/* ... */)
var qop = CKQueryOperation (query: q)

qop.resultsLimit = 5
qop.queryCompletionBlock = { (c:CKQueryCursor!, e:NSError!) -> Void in
  if nil != c {
    // there is more to do; create another op
    var newQop = CKQueryOperation (cursor: c!)
    newQop.resultsLimit = qop.resultsLimit
    newQop.queryCompletionBlock = qop.queryCompletionBlock

    // Hang on to it, if we must
    qop = newQop

    // submit
    ....addOperation(qop)
  }
}

....addOperation(qop)
于 2015-01-01T05:57:54.900 に答える