Итак, я нашел решение своей проблемы. Оказывается, что Core Data создает URL-адрес, по которому он будет хранить БД при создании объекта NSPersistentContainer, и сохраняет его в массиве объектов NSPersistentStoreDescription, которые он хранит. Я предполагаю, что внутри Core Data есть код, который создает этот URL из ряда свойств, включая то, что имитатор предназначен для запуска под XCode. Следовательно, если симулятор меняется, или приложение удаляется и переустанавливается в симуляторе, когда XCode запускает новый, он видит новое местоположение для симулятора и использует его в качестве базового пути для объекта URL, который Core Data использует для поиска базы данных SQLite.
Поэтому, поскольку я хочу исправить БД в фиксированном месте, пока я создаю и отлаживаю приложение, я просто перезаписал объект URL в объекте NSPersistentStoreDescription в массиве внутри контейнера объектом URL, который указывает на где я хотел, чтобы БД приземлился. Я обернул это в условную компиляцию #if DEBUG, чтобы случайно не оставить этот код в производственной сборке.
Для этого я добавил код в AppDelegate при создании отложенной загрузки Постоянного контейнера (кода, сгенерированного XCode). Код выглядит следующим образом (единственный новый код - это код в условной компиляции);
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "TestDB")
#if DEBUG
container.persistentStoreDescriptions[0].url =
URL(fileURLWithPath: "/Users/justme/Documents/code/data/TestDB.sqlite")
#endif
Я проверил это, и похоже, что он работает нормально. Если БД не существует, она создается по этому пути, а если она уже существует, она используется. Я могу удалить приложение, а затем перезапустить, и оно все еще использует тот же экземпляр БД.
Я надеюсь, что это помогает другим, и спасибо 'zaitsman' за то, что он дал мне немного фона, который помог мне наметить путь, чтобы сделать это работа.