ユーザーが入力した検索テキストを含むCloudKitレコードを検索しようとしています。CloudKitレコードの一部の単語を検索するにはどうすればよいですか?
- 項目1
- 項2
- 項3
- 試験1
- 試験2
:
私は(文字列形式)これらのタイトルのレコードを持っています私は「含む」を使ってみました:
let predicate = NSPredicate(format: "self contains %@", searchText)
let query = CKQuery(recordType: "ShareableItem", predicate: predicate)
publicDatabase.perform(query, inZoneWith: nil) { results, error in
...
しかし、これは、検索語として完全な単語を使用すると、私が探している結果のみを返します。
EG。 「アイテム」を検索すると、アイテム1、アイテム2、アイテム3が返されますが、「tem」を検索しても結果は得られません。
検索にワイルドカード文字を含める方法や、部分検索テキストを使用する別の方法はありますか?
NSPredicate(format: "allTokens TOKENMATCHES[cdl] %@", searchText)
を同じ結果
私に見えます。先行または後続スペースの 'searchText'をチェックしましたか?次に、列名をSwiftの予約語と衝突する可能性のある「self」から変更することを検討することもできます。 3つ目は、同じような構文の 'let predicate = NSPredicate(format:"%K like *%@ * "、" >> your column name << "、searchText.trimmingCharacters(in: .whitespacesAndNewlines)) ' – jboi
空白を確認しました。ありがとうございます。 'Self'はキー名ではなく、[CKQuery spec](https://developer.apple.com/reference/cloudkit/ckquery)の一部です。 "自己キーパスにより、サーバーは検索可能に見えるようになりますたとえば、述語文字列 "@ self"に "blue"が含まれていると、フルテキスト検索に含めるようにマークされたすべてのフィールドで "blue"という単語が検索されます。 "残念ながら、CloudKitフレームワークではlikeはサポートされていません。 – Derek