実現したいこと
ItemのattributeをToolbarItem遷移時につぎのViewにわたしたい
前提
NavigationLinkでは同じようなViewに遷移できるのに対し、ToolbarItemでは遷移できません。(ToolbarItemの遷移では、Entityのtext(String)をTextEditorに代入していないだけです。)
発生している問題・エラーメッセージ
Cannot convert value of type 'Item.Type' to expected argument type 'Item'
該当のソースコード
SwiftUI
1 2struct ContentView: View { 3 @Environment(\.managedObjectContext) private var viewContext 4 5 @FetchRequest( 6 sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: false)], 7 animation: .default) 8 private var items: FetchedResults<Item> 9 10 var body: some View { 11 NavigationView { 12 List { 13 ForEach(items) { item in 14 NavigationLink { 15 AnotherView(item: item) 16 } label: { 17 Text(item.text ?? "") 18 } 19 } 20 .onDelete(perform: deleteItems) 21 } 22 .toolbar { 23#if os(iOS) 24 ToolbarItem(placement: .navigationBarTrailing) { 25 EditButton() 26 } 27#endif 28 ToolbarItem { 29 NavigationLink { 30AnotherAnotherView(item: Item) 31} label: { 32Image(systemName: "gear") 33} 34 } 35 } 36 Text("Select an item") 37 } 38 } 39 40 private func addItem() { 41 withAnimation { 42 let newItem = Item(context: viewContext) 43 newItem.timestamp = Date() 44 45 46 do { 47 try viewContext.save() 48 } catch { 49 // Replace this implementation with code to handle the error appropriately. 50 // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 51 let nsError = error as NSError 52 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") 53 } 54 } 55 } 56 57 private func deleteItems(offsets: IndexSet) { 58 withAnimation { 59 offsets.map { items[$0] }.forEach(viewContext.delete) 60 61 do { 62 try viewContext.save() 63 } catch { 64 let nsError = error as NSError 65 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") 66 } 67 } 68 } 69} 70 71--- 72 73struct AnotherAnotherView: View { 74 75@Environment(\.managedObjectContext) private var viewContext 76@State var textEditorText = "" 77var item: Item 78このコードをクリップボードにコピー 79var body: some View { 80TextEditor(text: $textEditorText).frame(width: .infinity, height: .infinity) 81 82.toolbar { ToolbarItem(placement: .navigationBarLeading){ Button(action: {additem()}) {Image(systemName: "heart")}} } 83} 84 85func additem () { 86withAnimation { 87item.text = textEditorText 88 89 do { 90 try viewContext.save() 91 } catch { 92 let nsError = error as NSError 93 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") 94 } 95 } 96}} 97
試したこと
AnotherAnotherViewのitemを、item.text、Item.textにもしました。
補足情報(FW/ツールのバージョンなど)
Xcode14.1
私がコメントしてしまってすみません・・
好きでしていることなので、気にしないでくださいね。
(もし私と関わりたくないということでしたらはっきりそう言ってもらえると助かります{ちゃんと言ってもらえないと理解できない人間なので・・})
> NavigationLinkでは同じようなViewに遷移できるのに対し、ToolbarItemでは遷移できません。
今回の質問内容だけを見ると、
NavigationLinkが該当のソースコードにないので、
問題を理解することが難しいかもしれませんね。
AnotherAnotherViewの全体のコードは記載する必要がないかもしれません。
逆に、ToolbarItemを記述しているコードの全体を記述した方が回答しやすいかなと思いました。
---
前の質問からの流れでの確認になってしまいますが、
Listの方は編集の意味合いでAnotherAnotherViewに内容を表示するのですよね?
ToolbarItemの方はどういった意味合いでAnotherAnotherViewに内容を表示したいのでしょうか?
ご回答ありがとうございます
誤認のないよう言っておきますが、関わりたくないわけではありませんよ
あまりわたしと関わってその後あなたの可動域に支障をきたしても、とおもったので
---
念のため、言っておきますが
わたしもすぐコメントできるときとできないときがあるので、念頭においておいてください
ToolbarItemでの遷移は、AnotherViewとは一点だけ異なり、AnotherAnotherViewに用意したTextEditorに入力したStringを、Entityのtextに保存したい、と思っています。
コードの修正もしました
コメントありがとうございます。
> わたしもすぐコメントできるときとできないときがあるので、念頭においておいてください
それで大丈夫です!
わかりました
ありがとうございます。
Item.attribute must have a defined type
のエラーは、
ItemというEntityのattribute属性(Attribute)の型が設定されていない(=Undefined)から
なのではないかと思います。
でも、画像を見たところUndefinedのものはなさそうですよね。
[Product]-[Clean Build Folder]でクリーンしてみたらどうなります?
あるいはXcodeを再起動するとか?
エラーメッセージの最後の「[2]」というのも気になりますね。
手元で再現確認してみても、「[2]」っていうのは表示されないのですけどね。
CoreDataのファイルは1つだけですよね?
画像追加を確認していただいたのですね
attributeの話が肥大すると思い、
削除してしまいました。
> attributeの話が肥大すると思い、
確かに、記載するとしたら別の質問にした方が良いかもしれませんね。
回答4件
あなたの回答
tips
プレビュー