質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

1回答

717閲覧

検索時のPreview Crashed

pon3428

総合スコア14

0グッド

0クリップ

投稿2023/04/17 05:52

編集2023/04/17 06:11

実現したいこと

検索でのセルへの表示

前提

検索バーの表示、入力までできます

発生している問題・エラーメッセージ

![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-04-17/52f93fda-6ed2-4992-bbd1-b4cb2e425cac.jpeg) 検索するとこうなります

該当のソースコード

SwiftUI

1 2@State var searchText: String = "" 3 4List{…} 5.searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always), prompt: "検索").onChange(of: searchText) { newValue in search(text: newValue) 6 } 7 8func search(text: String) { 9 if text.isEmpty { 10 items.nsPredicate = nil 11 } else { 12 let titlePredicate: NSPredicate = NSPredicate(format: "title contains %@", text) 13 let contentPredicate: NSPredicate = NSPredicate(format: "content contains %@", text) 14 items.nsPredicate = NSCompoundPredicate(orPredicateWithSubpredicates: [titlePredicate, contentPredicate]) 15 } 16} 17

試したこと

var filteredItem: [String] {
if searchText.isEmpty {
return list
} else {
return items.text.filter { $0.lowercased().contains(searchText.lowercased()) }
}
}

を用意し

表示の際に
if array !== searchText {Text("no matches")}
if else array == searchText {Text(items.text.colors.filter { $0.contains(text.lowercased())
})}
default {Text(items.text[index])}

としました。

補足情報(FW/ツールのバージョンなど)

Xcode14.1

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/04/17 09:44

プレビューでクラッシュしているのでしょうか? シミュレーターではクラッシュしていないでしょうか? プレビューでクラッシュしている場合、 Persistence.swiftで Itemのインスタンスのtitleとcontentを設定していますでしょうか?
pon3428

2023/04/17 10:03 編集

ありがとうございます シミュレーターでもクラッシュします Persistence.swiftではItemのtextのインスタンスは設定しています。 contentは検索結果ですか? シミュレーターでクラッシュするときはThread 1: "unimplemented SQL generation for predicate : (title CONTAINS \"A\")"のエラーが出ます
guest

回答1

0

ベストアンサー

Persistence.swiftではItemのtextのインスタンスは設定しています。
シミュレーターでクラッシュするときはThread 1: "unimplemented SQL generation for predicate : (title CONTAINS "A")"のエラーが出ます

textのプロパティだけ設定してもダメかもしれませんね。
検索条件は、titleとcontentプロパティだと思いますので、
この2つのプロパティの値を設定してみたらいかがでしょうか?

シミュレーターでもクラッシュする場合は、
一度、シミュレーターからアプリを削除して、
(Core Dataの情報を削除)
再度実行してみたらいかがでしょうか?
*addItemする際にtitleとcontentに値を設定する必要がありそうです

追記です。

コメントありがとうございます。

contentは検索結果ですか?
contentは何として用いればよいかまではわかりせんが

すでに解決済みですが、
この質問に明確に回答していませんでしたね。

swift

1let titlePredicate: NSPredicate = NSPredicate(format: "title contains %@", text) 2let contentPredicate: NSPredicate = NSPredicate(format: "content contains %@", text)

質問欄のコードの12,13行目で検索条件を指定していると思います。
ここでtitleとcontentを使っています。
そのためCore Dataのデータにtitleとcontentが必要だと思いました。
*titleとcontentはメールで言うと、件名と本文ですかね。

なぜこの条件にしているのかは、私にはわかりません・・

投稿2023/04/17 10:10

編集2023/04/17 10:52
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pon3428

2023/04/17 10:33

ありがとうございます。 textとcontentですね contentは何として用いればよいかまではわかりせんが(アトリビュートはストリングだと思いますが) 検索結果として設定してみます
pon3428

2023/04/17 11:19

ありがとうございます ということは本文だけなら片方でいいですか?
退会済みユーザー

退会済みユーザー

2023/04/17 11:34

回答者がここにコメントしても質問者には通知が届かないから気づかないかもしれませんが・・ > ということは本文だけなら片方でいいですか? 片方というのは、条件に指定しているtitleとcontentのうちどちらかだけを記述・指定するということでしょうか? そうであれば、Core Dataのデータの値を設定するのは片方だけで良いかもしれませんね。 *ただ、他の場所にどんな処理が記述されているか、質問欄のコードからだけでは把握できないため、全体的な要件・仕様に合わせて実装してみてください
pon3428

2023/04/17 12:25

ありがとうございます いまみました 指定してるのは、Listに表示するためのtext(String)だけです。 おきづかいありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問