Строка CoreData заменяется текстом заполнителя при перезапуске приложения - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь сохранить строку в модели данных CoreData. Я считаю, что процесс сохранения работает нормально, однако я создал переменную text, которая просто содержит сообщение-заполнитель, прежде чем пользователь сохранит строку в базе данных. При перезапуске приложения все сохраненные сообщения снова заменяются текстом-заполнителем, при этом все сохраненные сообщения, созданные в предыдущем сеансе, теряются.

ClientData - это имя сущности, а presetMessage - это атрибут внутри. Тип presetMessage String.

ClientData + CoreDataClass.swift

import Foundation
import CoreData

@objc(ClientData)
    public class ClientData: NSManagedObject {

    @objc (setMessage:)
    public func setMessage(_ presetMessage: String?) {
    }

}

ClientData + CoreDataProperties.swift

import Foundation
import CoreData

extension ClientData {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<ClientData>{
        return NSFetchRequest<ClientData>(entityName: "ClientData")
    }

    @NSManaged public var presetMessage: String?

}

ViewController.swift

import UIKit
import CoreData

var text = "Placeholder Text"

class ViewController: UIViewController {

    var messageSaved = [ClientData]()

    override func viewDidLoad() {
    super.viewDidLoad()

        let fetchRequest: NSFetchRequest<ClientData> = ClientData.fetchRequest()

              do {
                  let messageSaved = try PersistenceServce.context.fetch(fetchRequest)
                  self.messageSaved = messageSaved
              } catch let error as NSError {
                  print("Error: \(error.domain)")
              }

    }    

    @IBAction func onEditMessageTap(_ sender: Any) {

   let alertController = UIAlertController(title: "Edit Preset Message", message: "Enter a new preset message", preferredStyle: .alert)
             alertController.addTextField { textfield in
                 textfield.placeholder = "Your message..."
             }
             alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))

        alertController.addAction(UIAlertAction(title: "Save", style: .default, handler: { action in
                 text = alertController.textFields!.first!.text!
                let savedMessage = ClientData(context: PersistenceServce.context)
                savedMessage.presetMessage = text
                PersistenceServce.saveContext()
                self.messageSaved.append(savedMessage)

                    return
             }))
             self.present(alertController, animated: true)

      }
}

PersistenceServce печатает SAVED, когда alertController заканчивается строкой, указывая, что он завершил свой процесс без ошибок.

Редактировать: Исходный код: https://github.com/SamuelMereau/coredata-error-reproduce

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...