問題タブ [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.
cloudkit - CloudKit: 削除されたレコードの CKQueryOperation
を使用せずに、最近削除されたアイテム (おそらく特定のタイムスタンプから) を CloudKit にクエリする方法はありますCKFetchRecordChangesOperation
か? 私はパブリック データベースを使用しているため、カスタム ゾーンを使用できません (これは の要件になりますCKFetchRecordChangesOperation
) ... そのため、パブリック データベースでこれをシミュレートする方法が必要です。
CloudKit レコードの変更について、ローカルの Core Data キャッシュを効率的に更新できるようにしたいと考えています。CloudKit レコードを照会すると、CKRecord にはcreationDate
andmodificationDate
プロパティがあり、最近作成または変更されたレコードを照会できますが、CloudKit で削除されたレコードでは機能しません。
ここで効果的な戦略は何でしょうか?
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
ところで、このエラーが発生すると、すべての操作でこのエラーが発生し、レコードが返されません。
swift - 最も古い変更されたレコードによる CloudKit クエリ
私は CloudKit を使用しており、「modificationDate」でレコードをフェッチしようとしていますが、最も古いものから結果の制限を設定します。たとえば、月、火、水、木に作成された 4 つのレコードがあり、そのうちの 2 つだけを選択すると、水、木ではなく、月、火のレコードが取得されます。以下は、修正しようとしているコードです。
}
NSSortDescriptor
昇順を偽にフラグを立てるのと同じくらい簡単だと思いました。しかし、これは機能しませんでした (さらにテストした結果、選択したフィールドの値が 0 のレコードのみが返されることがわかりました)。
さらに、さまざまな述語比較を試してみましたが、役に立ちませんでした。何かご意見は?CloudKit を永遠にあきらめる準備ができています。
ios - CloudKit に 100 を超えるレコードを含めることはできません
レコードをフェッチするさまざまな方法を試し、stackoverflow で同じ問題を確認しましたが、100 を超えるレコードをフェッチすることはできません。
以前は、CKQueryOperation の代わりに CKQuery を使用してresultsLimit
パラメーターを使用していました。
これが私のコードです:
performance - クラウドキット。Container Database への初回接続が遅い
私の質問は、クラウドキットと、パブリック データベースからレコードを取得するために CKQueryOperation を実行するときの遅延についてです。
私は多くのテストを行いましたが、間違いなく、これは初めて実行したとき、またはアプリを長期間使用していないときにのみ発生します. その場合、クエリを実行すると、レコードを取得するまでに数秒待たなければなりません。しかし、数秒後にリクエストを繰り返すと (または最初のリクエストをキャンセルして再度起動すると)、すべてが高速で完璧になります。
クラウドキットには、すでに起動されているクエリの「キャッシュ」があるため、次回 (短期間) は高速になりますか? または、最初に接続を確立し、後でこの接続を維持することについて何かありますか?
私は本当に多くのことを試しましたが、結果は常に同じです。
この振る舞いについて何か手がかりはありますか?
swift - CloudKit CKQueryOperation がすべてのレコードを取得しない
CloudKit の RecordType は 100 を超えるレコードです。次のコードは、これらの 11 のみから取得し、最初の 11 レコードではなく、レコードの先頭、中央、および末尾からランダムに選択されます。コードの何が問題なのかわかりません。
編集: .reselsLimit を 5000 に変更することで機能しました!
arrays - Swift 述語は、値の配列の最初の値にのみ一致します
Download
のラッパーとして機能するクラスがありますCKQueryOperation
。init の 1 つを使用すると、値の配列を使用して述語を作成できます。
テストするとquery
、配列の最初の値にのみ一致します。したがってqueryValues = [testValue0, testValue1]
、 フィールドが一致する 1 つのレコードがあり、testValue0
に一致する 2 番目のレコードがあるtestValue1
場合、最初のレコードのみが検出されます。順序を入れ替えると、他のレコードが認識されます。
配列で述語を作成できるのに、最初の値だけが一致するのは奇妙に思えます。ドキュメントには、値は出現順に代入されると書かれていますが、それでも 2 番目の値に移行するべきではありませんか?
詳細なコンテキストについては、各レコードが個別のデータベース (プライベートとパブリック) に格納され、param が nil のままの場合、私のクラスは両方が依存Download
する 2 つの個別のデータベースを起動します。どちらの操作が失敗しても、最初の値に一致する結果が見つからず、2 番目の値をチェックする前に諦めます。CKQueryOperations
query
database
「ダウンロード」の完全なコードと、必要に応じて失敗した単体テストを含めることができます。
ios - CKError: クエリ フィルターが値の制限を超えています: コンテナーの 250
公開データベースから約 500 件の「訪問」レコードを取得したいと考えています。CloudKit は一度に 100 レコードしか提供しないため、以下のように CKQueryCursor を使用して、必要なすべてのレコードを取得します。
私は次のように関数を呼び出します:
それはうまくいきます、それは私が必要とするすべての訪問を取得します。コンソール ログ
しかし、問題は、ボタンを押したときに更新したいのですが、次のエラーが表示されることです。
「サービス利用不可」(2022 年 6 月); "リクエストは http ステータス コード 503 で失敗しました"; 30.0 秒後に再試行
これはかなり自明ですが、わずか500件のレコードをリクエストすることでサーバーを圧倒していると思いますか? したがって、30 秒待って関数を再度呼び出すと、このエラーが発生します。
「制限を超えました」(2023年27月); サーバー メッセージ = "クエリ フィルターが値の制限を超えています: コンテナーの 250
何らかの理由で、その機能を再度実行できません。アプリを再起動すると、再び正常に動作しますが、初回のみです。この問題は、CKQueryCursor を返すすべてのテーブルに固有のようです。私がヒットしている他のテーブルには、100 未満のレコードがあり (したがって、カーソルは nil です)、問題なくそれらを複数回プルできます。