如何使用先前保存的 coreData 加载 TextEditor

Posted

技术标签:

【中文标题】如何使用先前保存的 coreData 加载 TextEditor【英文标题】:How to load TextEditor with previously saved coreData 【发布时间】:2020-10-27 15:13:54 【问题描述】:

我正在尝试使用 SwiftUI 构建一个简单的笔记样式应用程序。我设法创建了一个实体 (ApplicationQuestion),使用 TextEditor 将用户输入 (question.answer) 保存到该实体的属性中,并将该属性显示到视图中。

但是,我不想每次都保存并覆盖 question.answer,以便能够对其进行编辑。

我只能找到使用 UIkit 执行此操作的示例,并且文档没有说明如何将文本加载到编辑器中。如果 SwiftUI 无法实现这一点,我无法确定,我需要使用不同的方法。

目前的答案作曲家是这样的:

struct answerComposer: View 
    
    let question: ApplicationQuestion

    @Environment(\.managedObjectContext) var moc
    @State var answerText: String = ""
    @State private var currentWordCount: Int = 0


    
    var body: some View 
        
        VStack
            
            //Title
            Text(self.question.title?.uppercased() ?? "Unknown Title")
                  .font(.largeTitle)
            //Detail
            Text(self.question.detail ?? "Unknown detail")
                  .font(.footnote)
                  .fontWeight(.light)
            //answer
            Text(self.question.answer ?? "Unknown answer")
                .font(.body)
                .padding()

         //text editor
            
            TextEditor(text: $answerText)
                .allowsTightening(true)
                .onChange(of: answerText)  value in
                                    let words = answerText.split  $0 == " " || $0.isNewline 
                                    self.currentWordCount = words.count
                                
                .padding()
            
            // Save Button
            Button("Save") 
           // let question = ApplicationQuestion(context: self.moc)
                question.answer = self.answerText

                try? self.moc.save()

            
            
            
        
        

        
    


【问题讨论】:

【参考方案1】:

我猜你想要这个

struct answerComposer: View 
    
    let question: ApplicationQuestion

    @Environment(\.managedObjectContext) var moc
    @State private var currentWordCount: Int = 0

    @State private var answerText: String

    init(question: ApplicationQuestion) 
       self.question = question
       self._answerText = State(initialValue: question.answer ?? "")    // << here !!
    

    // ... other code

【讨论】:

太棒了!一个小的编辑,您需要为答案提供一个默认值,如下所示: init(question: ApplicationQuestion) self.question = question self._answerText = State(initialValue: question.answer ?? "")

以上是关于如何使用先前保存的 coreData 加载 TextEditor的主要内容,如果未能解决你的问题,请参考以下文章

XMPP,CoreData - 如何仅加载自身和目标用户消息?

iCloud + 预加载的 CoreData

如何使用 SQLite 文件预加载 Core Data,该文件引用使用“外部存储”保存的图像?

使用 CoreData 快速保存分数

来自先前选择器的选择器值 - CoreData/SwiftUI

在 Xcode 中使用 CoreData 从模态视图控制器重新加载视图