SwiftUI с Core Data получает пустой экран в симуляторе в Xcode 12

В XCode 12, если я создам новое приложение SwiftUI и отмечу кнопку «Использовать основные данные», полученное приложение (без изменений) покажет пустой экран в симуляторе (а также на устройстве). В предварительном просмотре он показывает примерные отметки времени, как и ожидалось. Почему на симуляторе / устройстве не отображаются временные метки в качестве примера?


person Sai Durga Mahesh    schedule 22.09.2020    source источник
comment
Мы были бы рады помочь, но, учитывая так мало подробностей, любой ответ будет лишь предположением. Измените свой вопрос, чтобы дать больше информации: это происходит для всех приложений или только для одного приложения? Так было всегда или уже началось? Какой у тебя код?   -  person pbasdf    schedule 22.09.2020
comment
Все еще проблема в Xcode 12.4. Я отправил отзыв openradar.appspot.com/radar?id=4939835114520576   -  person malhal    schedule 29.01.2021


Ответы (4)


Если вы хотите увидеть образцы входных данных из шаблона (10 строк с отметкой времени) в вашем симуляторе, вам необходимо изменить в App.swift:

пусть persistenceController = PersistenceController.shared

to

пусть persistenceController = PersistenceController.preview

Без этого изменения шаблон, предоставленный Apple, показывает образец ввода только в предварительном просмотре холста ContentView. В файле Persistence.swift есть две статические переменные: общая и предварительный. .Shared просто запускает (пустой) PersistenceController, в то время как статическая переменная .preview инициирует PersistenceController, добавляет десять элементов с текущей меткой времени в viewContext и сохраняет его.

person L-vis    schedule 19.10.2020
comment
Действительно. Но я предполагаю, что основная проблема заключается в том, что симулятор не показывает элементов управления для добавления элементов. - person Pierre Mardon; 05.11.2020
comment
Я заключил список в ContentView в NavigationView, а каждую кнопку модификатора панели инструментов - в ToolBarItem. После этого я могу видеть кнопки «Изменить» и «Добавить» в качестве кнопок NavigationBarButtons в моем симуляторе и могу добавлять элементы с помощью этих элементов управления. - person L-vis; 09.11.2020

Код по умолчанию для элементов панели инструментов не работает в SwiftUI: используйте его в коде шаблона. Вставьте список в NavigationView, а затем кнопки в HStack.

var body: some View {
    NavigationView { //added
    List {
        ForEach(items) { item in
            Text("Item at \(item.timestamp!, formatter: itemFormatter)")
        }
        .onDelete(perform: deleteItems)
    } .toolbar {
        
                    #if os(iOS)
                    HStack {  //added
                        EditButton()
                        Button(action: addItem) {
                            Label("Add Item", systemImage: "plus")
                        }
                    }//added
                    #endif

    }
    }//added NavView embed
}

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

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView().environment(\.managedObjectContext, PersistenceController.shared.container.viewContext)
    }
}
person uplearnedu.com    schedule 26.12.2020

Очистка данных в симуляторе у меня не сработала.

Я борюсь с .toolbar, но обнаружил, что он работает только с NavigationView в выпущенном XCode 12.

Поэтому, если вы используете шаблон, который появляется, когда вы щелкаете, чтобы использовать Core Data, просто добавьте в ContentView.

person Daniel Price    schedule 24.09.2020

очистка данных в симуляторе в разделе «Устройство» - ›Стереть все содержимое и настройки у меня сработали.

person Sai Durga Mahesh    schedule 22.09.2020
comment
Отлично @SaiDurgaMahesh - person Dc7; 22.09.2020