2015-01-01 20 views
6

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

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

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

ループはforというループを使用していますが、iCloudからすべての値を選択してループして選択する必要があるため、非常に集中します。私はそこにデータベースには多くの異なる投稿があることを期待しているので、必要なものだけをロードしたいと思います。

私はこのような何かを探しています:あなたは、あなたのCKQueryCKQueryOperationに提出

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

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

答えて

8

CKQueryOperationは、cursorという概念とresultsLimitという概念を持ちます。彼らはあなたのクエリ結果をバンドルすることができます。文書で説明したように:

は、新たな検索を実行するには、次の

1) 検索条件を含む、あなたがしたいレコードの情報をソートCKQueryオブジェクトとCKQueryOperationオブジェクトを初期化します。

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

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

3)返信結果をコンフィグレーションするには、 resultsLimitおよびdesiredKeysプロパティの値を指定します(オプション)。

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

だから、次のようになります。私はこのような何かについて読んだが、私のような最初の5つの値を選択し、次に、新しい操作で、最初の5をスキップして何かを行うことができます

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) 
+0

値を選択し、次の5を選択しますか? – Jojodmo

+0

私は答えを更新しました(私に5分を与える)。それは5つを取ってすぐに5つを取るので、少し非現実的です。ユーザーがスクロールした後など、次の5つを取得したいと思うかもしれません。 – GoZoner

+0

ありがとう、私はちょうどこれを一度呼び出すと、次の5をロードする必要があるときに新しい操作を追加しますか? – Jojodmo

関連する問題