Мое приложение имеет сущность 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)")
}
}
Спасибо!