微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

由于 NSSortDescriptor,SwiftUI NavigationView 跳回前一个视图

如何解决由于 NSSortDescriptor,SwiftUI NavigationView 跳回前一个视图

我有一个带有两个视图的笔记应用:TempNoteViewNoteView

NoteView 中按下保存按钮后,它会使用当前日期更新 createdAt。但是,当我返回到我的 TempNoteView 时,使用 saveContext() 保存变量后,导航视图会跳回到上一个视图 (NoteView)。如果我删除 NSSortDescriptor,问题就会消失。我该如何解决这个问题?

TempNoteView

struct TempNoteView: View {
    @Environment(\.managedobjectContext) private var viewContext

    @FetchRequest(
        entity: Note.entity(),sortDescriptors: [
            NSSortDescriptor(keyPath: \Note.createdAt,ascending: false)
        ]
    ) private var notes: FetchedResults<Note>
    
    var isNoteView = false
    
    var body: some View {
            List {
                ForEach(notes,id: \.self) { note in
                    
                    
                    NavigationLink(destination: NoteView(isNoteView: true,note: note)) {
                        Text(note.name ?? "Untitled")
                        Spacer()
                        
                    }
                }.onDelete(perform: deleteNotes)
            }
            .navigationTitle("Notes")
            .navigationBarItems(trailing: Button(action: {addNote()},label: {
                Text("Add Note")
            }))
    }
    
}

NoteView

struct NoteView: View {
        
    // DATABASE ON CORE DATA
    @Environment(\.managedobjectContext) private var viewContext

    @State var noteName: String = ""
    @State var fullText: String = ""
    @State var notePin: Bool = false

    @State var isNoteView = false
    @State var editMode = false
    @State var note : Note
    
    var body: some View {
        if isNoteView == true {
            ZStack {
                NavigationView {
                    vstack {
                        
                        if editMode {
                            ToolBar()
                        }
                            
                        
                    }.padding(.top,60)
                }
                .navigationBarTitle("")
                .navigationBarHidden(true)
                .onAppear(){
                    self.fullText = note.content!
                    self.noteName = note.name!
                    self.notePin = note.pin
                }
                
                vstack {
                    HStack {
                        Spacer()
                        
                        Button(action: {
                            // for saving content
                            if editMode == false {
                                self.editMode = true
                            } else {
                                note.content = fullText
                                note.name = noteName
                                note.createdAt = Date()
                                saveContext()
                                self.editMode = false
                            }
                            
                        }) {
                            if editMode == false {
                                Image("pen").resizable().frame(width:23,height: 23)
                            } else {
                                Image("save").resizable().frame(width:23,height: 23)
                            }
                        }
                        
                   
                    }
                    Spacer()
                }
                

            }
        }
    }
    
    func saveContext() {
        do {
            try viewContext.save()
        } catch {
            let error = error as NSError
            fatalError("Unresolved Error: \(error)")
        }
    }
}

解决方法

尝试保存导航状态并将其传递给每个 NavigationLink

@State var selectedNote: Note? = nil

var body: some View {
    List {
        ForEach(notes,id: \.self) { note in
            NavigationLink(destination: NoteView(isNoteView: true,note: note),tag: note,selection: $selectedNote,label: {
                Text(note.name ?? "Untitled")
                Spacer()
            })
        }.onDelete(perform: deleteNotes)
    }
    ...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?