Базовые данные: атрибут двоичных данных становится нулевым, когда другой атрибут изменяется - PullRequest
0 голосов
/ 01 октября 2018

Мое приложение имеет сущность Core Data (называемую Product), которая имеет два атрибута:

  • Имя типа String
  • Изображение типа Binary Data (с «Разрешить внешний»Хранилище "проверено)

Прямо сейчас, так как я занимаюсь разработкой, я создаю объект по умолчанию в своем начальном viewDidLoad с жестко заданными значениями для имени и изображения.После создания объекта я могу без проблем передать его и использовать в своем приложении.

Однако , если я обновлю атрибут name до нового строкового значения и перезапущу приложение,атрибут изображения становится nil (это происходит только после того, как я перезапущу приложение или завершу и снова открою его).Знаете ли вы, что может быть причиной такого поведения?

Вот как я изменяю значение имени:

DataController.shared.viewContext.perform {

    if mike {
        product.name = "Mike"
    } else {
        product.name = "Bob"
    }
    try? DataController.shared.viewContext.save()
}

Я использую класс DataController для взаимодействия с постоянным хранилищем:

   class DataController {

    static let shared = DataController(modelName: "my_model")        
    let persistentContainer: NSPersistentContainer
    var viewContext: NSManagedObjectContext {
        return persistentContainer.viewContext
    }
    private init(modelName: String) {
        persistentContainer = NSPersistentContainer(name: modelName)
    }
    func configureContexts() {
        viewContext.automaticallyMergesChangesFromParent = true
        viewContext.mergePolicy = NSMergePolicy.mergeByPropertyStoreTrump
   }
}

Я также использую NSFetchedResultsController.Вот как я это настроил в своем viewDidLoad:

fileprivate func setupFetchedResultsController() {
    let fetchRequest:NSFetchRequest<Product> = Product.fetchRequest()
    let sortDescriptor = NSSortDescriptor(key: "salesByVolume", ascending: false)
    fetchRequest.sortDescriptors = [sortDescriptor]
    fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DataController.shared.viewContext, sectionNameKeyPath: nil, cacheName: "products")
    fetchedResultsController.delegate = self
    do {
        try fetchedResultsController.performFetch()
    } catch {
        fatalError("The request could not be performed: \(error.localizedDescription)")
    }
}

Спасибо!

1 Ответ

0 голосов
/ 01 октября 2018

Возможно, вы захотите попробовать следующее:

DataController.shared.viewContext.perform {
    product.setValue("Mike", forKey: "name")
    try? DataController.shared.viewContext.save()
}

Вам необходимо установить значение ключа, чтобы обновить его значение, затем вы можете сохранить его.Я надеюсь, что это помогает

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