SwiftUI и Core Data: выборка на основе пользовательского ввода - PullRequest
0 голосов
/ 06 ноября 2019

Я борюсь с тем, что, как я подозреваю, является очень простой схемой, и я был бы признателен за точку в правильном направлении. Вкратце: я хочу перейти от основного вида (Список) к подробному виду (Список), где строка, нажатая в основном списке, вызывает выборку основных данных для заполнения подробного списка. Например:

struct ContentView: View {
    let makes = ["GMC", "Ford", "Chevy"]

    var body: some View {
        NavigationView {
            List(self.makes, id: \.self) { make in
                NavigationLink(destination: DetailView()) {
                  Text(make)
                } //NavigationLink
            } //List
        } //NavigationView
    } //body
} //ContentView

Так что, если пользователь нажимает на строку с надписью «Chevy», я хочу выполнить выборку основных данных, возвращая все объекты Vehicle с помощью make == «Chevy», а затем использовать эти автомобили для заполнения. подробный список просмотра. Я знаю, как выполнить выборку с помощью необходимого предиката, но я не могу понять, когда и где выполнить выборку при нажатии строки или как затем получить результаты выборки в подробном представлении.

Изменить: И чтобы уточнить, я хотел бы избежать шаблона, в котором ContentView извлекает все транспортные средства заранее, а затем просто фильтрует их на основе выбранной марки. Вместо этого я хотел бы, чтобы выборка происходила динамически после того, как пользователь коснулся строки.

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Я думаю, что лучшим способом было бы позволить DetailView выполнить выборку, просто передать выбранную строку в DetailView и позволить ей выполнить свою работу, вы можете поместить выборку в DetailView init или лучшепоместите его в init модели.

Но, возможно, вы не хотите выполнять навигацию, если нет данных, соответствующих выбранной строке (было бы немного уродливо отображать пустой список в DetailView), вВ этом случае вы должны поместить выборку в модель MasterView и вызвать ее при нажатии строки. Пожалуйста, посмотрите ответ, который я дал здесь ранее сегодня https://stackoverflow.com/a/58723514/10208552, В основном вы нажмете кнопку, которая вызовет выборку, которая вызоветнавигация

0 голосов
/ 07 ноября 2019

Передайте make во второй вид с помощью простого параметра структуры, например:

NavigationLink(destination: DetailView(make: make))

Ваш DetailView просто нуждается в этом параметре make:

struct DetailView: some View {
    var make: String
}

Затем используйтезапрос предикатной выборки, который выглядит примерно так:

 @FetchRequest(
    entity: Vehicle.entity(),
    sortDescriptors: [
        NSSortDescriptor(key: "model", ascending: true),
    ],
    predicate: NSPredicate(format: "make == %@", self.make)
) var vehicles: FetchedResults<Vehicle>

Обратите внимание, что этот код не проверен, но это должно привести вас на правильный путь.

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