問題タブ [ckquery]
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.
swift - CloudKit の問題を伴う CKQuery
私は CloudKit を初めて使用し、最も基本的なクエリを実行しようとしています。RecordType "Users" とフィールド タイプ "Name" からプルし、名前を nameText ラベルと同じにしたい!
以下の私のコードを見てください:
ios - recordID IN [CKRecordID] について CloudKit にクエリを実行する方法
私の述語は、[CKRecordID] で既にダウンロードされ、利用可能な一部のレコードを除外したいと考えています。これで、1 つの CKRecordID[0] をクエリできますが、[CKRecordID] 配列はクエリできません。配列を照会するにはどうすればよいですか?
これは機能します:
しかし、これはしません:
エラー: loadImageCompareRecordIDsAndEndDateThatHaveNotEnded エラー: 無効な述語: 無効な述語: 配列メンバーは CKRecordValue に準拠する必要があります: ( "", "", "", "", "" ) (CKRecordID)
コードのその他の一般的な部分:
ios - 偽りの CloudKit 呼び出しを停止しますか?
publicDB にデータがある CloudKit アプリがあります。これは、承認されたユーザーが作成して読み取ることができる安全なデータですが、アプリが行うクエリに基づいて制限しています。たとえば、ユーザー A およびユーザー B との関係を示しているが、ユーザー C との関係を示していないデータ オブジェクトは、ユーザー C によってクエリされることはありません。
誰かが私のアプリを潜在的にジェイルブレイク/ハイジャックし、承認されたアプリが実行できるクエリを実行する可能性を懸念しています。「認証された」ユーザーが実際に私のアプリを通常どおり使用している本物の認証済みユーザーであり、サードパーティが私のアプリにコードを挿入していないことを確認するにはどうすればよいですか?
nspredicate - 「CONTAINS」演算子を使用すると、NSPredicate を使用した CKQuery が失敗する
Apples Class Reference によるとCKQuery
、この演算子CONTAINS
はサポートされている演算子の 1 つです。しかし、それはうまくいかないようです。とRecordType
呼ばれる とmyRecord
、フィールド名がname
typeのレコードがありますString
。1 つは "==" 演算子を使用し、もう 1 つは演算子を使用して、2 つの異なる述語を使用してレコードを取得しようとしましたCONTAINS
。
を使用するPredicate1
と、出力は次のようになります。
を使用するPredicate2
と、出力は次のようになります。
また[c]
、大文字と小文字を無視するために使用すると、サーバーの問題が発生します。
CONTAINS
演算子を正しく使用するにはどうすればよいですか?
編集:
ドキュメントを詳しく調べたところ、 でCONTAINS
のみ使用できることがわかりましたSELF
。すべての文字列フィールドが検索に使用されることを意味します。より良い方法はありませんか?
ios - CKQueryが存在する場合のCKQueryOperationの存在理由
異なる CKQuery をチェーンする機能と、取得結果の制限を設定する機能以外に、なぜ CKQueryOperation が必要なのですか? 基本的にそれらの2つの機能ですか?CKQueryOperation を使用する理由がわからないからです。
nspredicate - CKReference に基づく述語を使用して CKQueryOperation を実行すると、すべての「所有レコード」が返されない
私のスキーマは次のとおりです
RecordType: OwnedEvents には、「Owner」という要素が含まれています。この Owner 要素は、「OwnedEvents」タイプの RecordType から作成された CKReference を指します。
N 個の OwnedEvents オブジェクトがすべて 1 つの Owner オブジェクトを指しています。
特定の Owner オブジェクトを指すすべてのレコードを取得するクエリを実行すると、場合によっては、そのオブジェクトを指すすべてのレコードが返されないことがわかります (ほとんどの場合、返されます)。また、完了ブロックでエラーを返しません。CloudKit ダッシュボードに移動すると、すべての OwnedEvents オブジェクトが同じ正しい Owner オブジェクトを指していることがわかります。取得に使用しているコードは以下のとおりです。
私の質問は次のとおりです。
この種の「サイレント」障害は予想されますか? つまり、これを特定して回復する必要がありますか? または、クエリで何か間違ったことをしていますか?
基準に一致するすべてのレコードが取得されない場合、クエリがエラーを返さなければならないと言う方法はありますか? (つまり、フェッチのアトミックバージョン..一致するレコードの予想数を事前に知るのは難しいため、そうではないと思いますが、フェッチまたはスキーマで指定できるものがあるかどうか疑問に思っていますフェッチ結果で予想されるレコードの最小数を示します)。
形式の述語を使用するフェッチと比較して、参照を使用して形成された述語を使用してフェッチする方が効率的ですか?
- 参照は同じレコード セット N1...N2 を指す
- つまり、参照ベースの検索が信頼できなくなる場合は、それをやめて力ずくのアプローチを取ることもできます。少なくとも後者では、エラーを特定する簡単な方法があります
使用したコード
cloudkit - CloudKit: 削除されたレコードの CKQueryOperation
を使用せずに、最近削除されたアイテム (おそらく特定のタイムスタンプから) を CloudKit にクエリする方法はありますCKFetchRecordChangesOperation
か? 私はパブリック データベースを使用しているため、カスタム ゾーンを使用できません (これは の要件になりますCKFetchRecordChangesOperation
) ... そのため、パブリック データベースでこれをシミュレートする方法が必要です。
CloudKit レコードの変更について、ローカルの Core Data キャッシュを効率的に更新できるようにしたいと考えています。CloudKit レコードを照会すると、CKRecord にはcreationDate
andmodificationDate
プロパティがあり、最近作成または変更されたレコードを照会できますが、CloudKit で削除されたレコードでは機能しません。
ここで効果的な戦略は何でしょうか?
ios - 特定の文字列を含むレコードを返す Cloudkit
私のプロジェクトでは、CloudKit レコード タイプ「ユーザー」(他のレコード タイプ名でもテストしました) を使用して、メール フィールドを持つレコードを作成します。
そのメールを正確に照合し、一致するレコードを取得しようとしています。私はこれを IN または == 述語で行っています (単一または電子メールのリストの場合)。
私が問題を抱えている電子メールは「julio_ukohgsp_chevez@tfbnw.net」です。この電子メールでレコードを取得しようとすると、0 が返されますが、「julio_ukohgsp_chevez@tfbnw.ne」に変更すると、正常に取得されます。
最初は特殊文字だと思っていましたが、それらを含む他の文字列は正常に機能します。次に、長さを想定しますが、他の長い文字列は問題なく機能します。
他の誰かがこの問題を抱えていますか? この文字列に一致できない理由を理解せずに、CloudKit を信頼するのに苦労しています。
私は同様の質問をしましたが、詳細を知る前に、ユーザーがこれをテストして、この文字列で同じ結果を得ました。この投稿はより簡潔で、再作成する手順があります。