Контекст управляемого объекта должен быть явно сохранен вскоре после изменения его данных. Это то, что вы должны делать в своем коде, а не функция Xcode или Simulator. Реализуйте и вызовите функцию, которая сохраняет соответствующий контекст управляемого объекта. Не ждите, пока ваше приложение завершится.
func save() {
do {
try self.managedObjectContext.save()
}
catch {
let nserror = error as NSError
NSLog("Whoops! \(nserror), \(nserror.userInfo)")
}
}
Однако, если вы используете родительский и дочерний контексты, все немного сложнее. Документация Apple хорошо объясняет это:
Когда вы сохраняете изменения в контексте, изменения фиксируются только «на одно хранилище». Если вы сохраняете дочерний контекст, изменения переносятся в его родительский. Изменения не сохраняются в постоянном хранилище до тех пор, пока не будет сохранен корневой контекст. (Корневым контекстом управляемого объекта является тот, родительский контекст которого равен nil.) Кроме того, родительский объект не извлекает изменения у дочерних элементов до его сохранения. Вы должны сохранить дочерний контекст, если хотите в конечном итоге зафиксировать изменения.
Для хранилища SQLite постоянное хранилище , к которому они относятся, - это файлы SQLite на диске. (По умолчанию на диске есть три файла SQLite: основной файл, файл -shm и файл -wal).