実現したいこと
1:多の保存をしたい
前提
Listにtext1(String)を表示して、タップするとそれぞれに遷移して、編集可能となります。
その際、Bool値が2つあり、それぞれのtext1の値に対してリレーションで保存したいと思っています。
そのため、EntityはItem1とItem2を用意しています。
発生している問題・エラーメッセージ
EntityでItem1とItem2を設定しているのに Use of local variable 'item2' before its declaration と出る。
該当のソースコード
SwiftUI
1 2func registSampleData(context: NSManagedObjectContext) { 3 4 /// Item1テーブル初期値 5 let studentList = [ 6 ["item1"] 7 ] 8 9 /// Item2テーブル初期値 10 let clubList = [ 11 ["item2"] 12 ] 13 14 /// Task1テーブル全消去 15 let fetchRequestStudent = NSFetchRequest<NSFetchRequestResult>() 16 fetchRequestStudent.entity = Student.entity() 17 let students = try? context.fetch(fetchRequestStudent) as? [Student] 18 for student in students! { 19 context.delete(student) 20 } 21 22 /// Task2テーブル全消去 23 let fetchRequestClub = NSFetchRequest<NSFetchRequestResult>() 24 fetchRequestClub.entity = Club.entity() 25 let clubs = try? context.fetch(fetchRequestClub) as? [Club] 26 for club in clubs! { 27 context.delete(club) 28 } 29 30 for club in clubList { 31 let newClub = Item1(context: context) 32 newClub.id = item1[0] 33 newClub.text1 = item1[1] 34 35newClub.text2 = item1[2] 36 37newClub.text3 = item1[3] 38 39 } 40 41 let dateFormatter = DateFormatter() 42 dateFormatter.dateFormat = "yyyy/M/d" 43 44 for student in studentList { 45 let newStudent = Item2(context: context) 46 newStudent.id = item2[0] 47 newStudent.bool1 = Item2[1] 48 newStudent.bool2 = Item2[2] 49 50 /// リレーションの設定 51 fetchRequestClub.predicate = NSPredicate(format: "id = %@", student[5]) 52 let result = try? context.fetch(fetchRequestClub) as? [Item1] 53 if result!.count > 0 { 54 newStudent.club = result![0] 55 } 56 } 57 58 /// コミット 59 try? context.save() 60} 61
試したこと
再起動、プロジェクトをつくり直しました。
補足情報(FW/ツールのバージョンなど)
Xcode14.1
前提のところでは
「EntityはItem1とItem2を用意しています。」
と記載されていますが、
該当のソースコードの中では
Studentのエンティティ、Clubのエンティティなども登場しているように見えました。
該当のソースコードをコピペして再現確認してみたところ
「Use of local variable 'item2' before its declaration」
のビルドエラーにはならず、
「Connot find 'item1' in scope」のようなビルドエラーになりました。
実際のコードと「該当のソースコード」が違うのかなと思います。
コードが違うと回答できないと思いますので、
「Use of local variable 'item2' before its declaration」
のビルドエラーになるコードに修正してもらえると助かります。
ありがとうございます
やっていて思ったのですが
1:多とはいいますが、1であるtext1はStringで、Item.text1となります。
一方、多であるBool値ふたつはそのそれぞれに保存することになります。
その際、Item.text1のそれぞれは、どのように記述すればいいと思いますか?
Item1.text1[0]やItem1.text1[index]でしょうか。
回答1件
あなたの回答
tips
プレビュー