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

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

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

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

148閲覧

SwiftDataの削除処理について教えていただきたいです。

quwant

総合スコア5

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2024/04/25 09:44

実現したいこと

現在、iOSアプリの開発にSwiftDataを用いています。
削除メソッドを作成したのですが、削除がされていないようなので、SwiftDataの削除処理について教えていただきたいです。

発生している問題・分からないこと

下記が現在のソースコードになります。

該当のソースコード

Swift

1import SwiftUI 2import SwiftData 3 4@Model 5final class ColorData { 6 @Attribute(.unique) var code: String 7 var name: String 8 var r: Int 9 var g: Int 10 var b: Int 11 var h: Int 12 var s: Int 13 var v: Int 14 var like: Bool 15 16 init(code: String, name: String, r: Int, g: Int, b: Int, h: Int, s: Int, v: Int, like: Bool) { 17 self.code = code 18 self.name = name 19 self.r = r 20 self.g = g 21 self.b = b 22 self.h = h 23 self.s = s 24 self.v = v 25 self.like = like 26 } 27}

Swift

1@Query private var colors: [ColorData] 2 3private func allDelete() { 4 for color in colors { 5 context.delete(color) 6 } 7 do { 8 try context.save() 9 } catch { 10 print(error.localizedDescription) 11 } 12}

Swift

1private func delete(code: String, name: String, r: Int, g: Int, b: Int, h: Int, s: Int, v: Int, like: Bool) { 2 let data = ColorData(code: code, name: name, r: r, g: g, b: b, h: h, s: s, v: v, like: like) 3 context.delete(data) 4 do { 5 try context.save() 6 } catch { 7 print(error.localizedDescription) 8 } 9}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

上記ソースコードのallDeleteは機能しているようで、全てのColorDataが削除されます。
ただ、deleteの方は削除がされていないように見えます。
削除の仕方がどこかおかしいのでしょうか?

補足

特になし

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

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

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

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

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

guest

回答2

0

ベストアンサー

ModelContextで管理されているインスタンスを渡す必要がありそうですね。

swift

1 if let data = colors.first(where: { $0.code == code }) { 2 modelContext.delete(data) 3 }

参考

Deleting persistent data from your app | Apple Developer Documentation

Filtering and sorting persistent data | Apple Developer Documentation

delete / モデルの削除
// 異なる context で存在しない item を削除しようとしてもエラーはスローされない

SwiftData 入門

投稿2024/04/25 14:57

yametai

総合スコア27

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

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

quwant

2024/04/26 05:05

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

0

下記のようにしたことで削除できるようになりました!

Swift

1 @Query private var allColor: [ColorData] 2 3 private func delete(code: String) { 4 if let data = allColor.first(where: { $0.code == code }) { 5 context.delete(data) 6 } 7 8 do { 9 try context.save() 10 } catch { 11 print(error.localizedDescription) 12 } 13 }

投稿2024/04/26 05:04

編集2024/04/26 05:06
quwant

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問