問題タブ [ckqueryoperation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
772 参照

cloudkit - CloudKit: 削除されたレコードの CKQueryOperation

を使用せずに、最近削除されたアイテム (おそらく特定のタイムスタンプから) を CloudKit にクエリする方法はありますCKFetchRecordChangesOperationか? 私はパブリック データベースを使用しているため、カスタム ゾーンを使用できません (これは の要件になりますCKFetchRecordChangesOperation) ... そのため、パブリック データベースでこれをシミュレートする方法が必要です。

CloudKit レコードの変更について、ローカルの Core Data キャッシュを効率的に更新できるようにしたいと考えています。CloudKit レコードを照会すると、CKRecord にはcreationDateandmodificationDateプロパティがあり、最近作成または変更されたレコードを照会できますが、CloudKit で削除されたレコードでは機能しません。

ここで効果的な戦略は何でしょうか?

0 投票する
0 に答える
146 参照

ios - CKQueryOperation でランダムに「No operations present in request」というエラーが発生しました

以下のコード スニペットを使用して、Cloud Server からいくつかのレコードを取得しようとしています。ほとんどの場合、エラーなしでレコードを返します。

しかし、時々、それはエラーを返します:

{
NSDebugDescription = "CKInternalErrorDomain: 1009";
NSLocalizedDescription = "リクエストに操作がありません";
NSUnderlyingError = "エラー Domain=CKInternalErrorDomain Code=1009 \"No operations present in request\" UserInfo={NSLocalizedDescription=No operations present in request}";
}

エラーコードを確認しましたがCKErrorInvalidArguments、ドキュメントが言ったように

不正なクライアント リクエスト (不正なレコード グラフ、不正な述語)

このエラーがどのように発生し、このエラーを処理する方法がわかりCKErrorNetworkUnavailableません。エラーとは異なり、時間間隔の後にリクエストを送信するCKErrorRetryAfterKey価値はありません。error.userInfo


ところで、このエラーが発生すると、すべての操作でこのエラーが発生し、レコードが返されません。

0 投票する
0 に答える
223 参照

swift - 最も古い変更されたレコードによる CloudKit クエリ

私は CloudKit を使用しており、「modificationDate」でレコードをフェッチしようとしていますが、最も古いものから結果の制限を設定します。たとえば、月、火、水、木に作成された 4 つのレコードがあり、そのうちの 2 つだけを選択すると、水、木ではなく、月、火のレコードが取得されます。以下は、修正しようとしているコードです。

}

NSSortDescriptor昇順を偽にフラグを立てるのと同じくらい簡単だと思いました。しかし、これは機能しませんでした (さらにテストした結果、選択したフィールドの値が 0 のレコードのみが返されることがわかりました)。

さらに、さまざまな述語比較を試してみましたが、役に立ちませんでした。何かご意見は?CloudKit を永遠にあきらめる準備ができています。

0 投票する
1 に答える
531 参照

ios - CloudKit に 100 を超えるレコードを含めることはできません

レコードをフェッチするさまざまな方法を試し、stackoverflow で同じ問題を確認しましたが、100 を超えるレコードをフェッチすることはできません。

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

これが私のコードです:

0 投票する
0 に答える
106 参照

performance - クラウドキット。Container Database への初回接続が遅い

私の質問は、クラウドキットと、パブリック データベースからレコードを取得するために CKQueryOperation を実行するときの遅延についてです。

私は多くのテストを行いましたが、間違いなく、これは初めて実行したとき、またはアプリを長期間使用していないときにのみ発生します. その場合、クエリを実行すると、レコードを取得するまでに数秒待たなければなりません。しかし、数秒後にリクエストを繰り返すと (または最初のリクエストをキャンセルして再度起動すると)、すべてが高速で完璧になります。

クラウドキットには、すでに起動されているクエリの「キャッシュ」があるため、次回 (短期間) は高速になりますか? または、最初に接続を確立し、後でこの接続を維持することについて何かありますか?

私は本当に多くのことを試しましたが、結果は常に同じです。

この振る舞いについて何か手がかりはありますか?

0 投票する
0 に答える
567 参照

swift - CloudKit CKQueryOperation がすべてのレコードを取得しない

CloudKit の RecordType は 100 を超えるレコードです。次のコードは、これらの 11 のみから取得し、最初の 11 レコードではなく、レコードの先頭、中央、および末尾からランダムに選択されます。コードの何が問題なのかわかりません。

編集: .reselsLimit を 5000 に変更することで機能しました!

0 投票する
2 に答える
573 参照

arrays - Swift 述語は、値の配列の最初の値にのみ一致します

Downloadのラッパーとして機能するクラスがありますCKQueryOperation。init の 1 つを使用すると、値の配列を使用して述語を作成できます。

テストするとquery、配列の最初の値にのみ一致します。したがってqueryValues = [testValue0, testValue1]、 フィールドが一致する 1 つのレコードがあり、testValue0に一致する 2 番目のレコードがあるtestValue1場合、最初のレコードのみが検出されます。順序を入れ替えると、他のレコードが認識されます。

配列で述語を作成できるのに、最初の値だけが一致するのは奇妙に思えます。ドキュメントには、値は出現順に代入されると書かれていますが、それでも 2 番目の値に移行するべきではありませんか?

詳細なコンテキストについては、各レコードが個別のデータベース (プライベートとパブリック) に格納され、param が nil のままの場合、私のクラスは両方が依存Downloadする 2 つの個別のデータベースを起動します。どちらの操作が失敗しても、最初の値に一致する結果が見つからず、2 番目の値をチェックする前に諦めます。CKQueryOperationsquerydatabase

「ダウンロード」の完全なコードと、必要に応じて失敗した単体テストを含めることができます。

0 投票する
3 に答える
594 参照

ios - CKError: クエリ フィルターが値の制限を超えています: コンテナーの 250

公開データベースから約 500 件の「訪問」レコードを取得したいと考えています。CloudKit は一度に 100 レコードしか提供しないため、以下のように CKQueryCursor を使用して、必要なすべてのレコードを取得します。

私は次のように関数を呼び出します:

それはうまくいきます、それは私が必要とするすべての訪問を取得します。コンソール ログ

しかし、問題は、ボタンを押したときに更新したいのですが、次のエラーが表示されることです。

「サービス利用不可」(2022 年 6 月); "リクエストは http ステータス コード 503 で失敗しました"; 30.0 秒後に再試行

これはかなり自明ですが、わずか500件のレコードをリクエストすることでサーバーを圧倒していると思いますか? したがって、30 秒待って関数を再度呼び出すと、このエラーが発生します。

「制限を超えました」(2023年27月); サーバー メッセージ = "クエリ フィルターが値の制限を超えています: コンテナーの 250

何らかの理由で、その機能を再度実行できません。アプリを再起動すると、再び正常に動作しますが、初回のみです。この問題は、CKQueryCursor を返すすべてのテーブルに固有のようです。私がヒットしている他のテーブルには、100 未満のレコードがあり (したがって、カーソルは nil です)、問題なくそれらを複数回プルできます。