Выбрать основной объект данных в списке - PullRequest
1 голос
/ 12 марта 2020

Основные данные User Я создаю со свойством id and name, которое я хочу извлечь из него в список.

struct MyView: View {
    @FetchRequest(entity: User.entity(), sortDescriptors: []) var users: FetchedResults<User>

    var body: some View {
        VStack {
            List {
                ForEach(users, id: \.id) { user in  // Type '_' has no member 'id'
                    // Text(user.name)
                }
            }
        }
    }
}

Я запутался с сообщением об ошибке, которое, похоже, не удалось успешно импортировать ядро объект данных.

ОБНОВЛЕНИЕ

Когда я пытаюсь использовать свойство name в списке, он также сообщает Value of type 'NSManagedObject' has no member 'name' сообщение об ошибке.

ForEach(users, id: \.id) { user in
    Text(user.name)
}

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Время от времени вам нужно создать проект для распознавания сущности в коде. Вот код для загрузки сущности CoreData User с идентификатором и именем.

struct ContentView: View {
    @Environment(\.managedObjectContext) var context
    @FetchRequest(entity: User.entity(), sortDescriptors: [])
    var users: FetchedResults<User>

    var body: some View {
        List {
            ForEach(users, id: \.id) { user in
                Text("Id = \(user.id), Name = \(user.name ?? "")")
            }
        }
    }
}

Кроме того, вы можете настроить сущность User на «Идентифицируемый». При этом вы можете пропустить параметр id в ForEach.

extension User: Identifiable {
}

ForEach(users) { user in
    Text("Id = \(user.id), Name = \(user.name ?? "")")
}

User entity setup

0 голосов
/ 12 марта 2020

Обращаясь к этой статье , я создаю новую структуру UserRow для хранения основного объекта данных, и она работает правильно для меня. Но я думаю, что есть кое-какие знания, которых мне не хватает в этой ситуации, и было бы очень любезно, если бы кто-нибудь смог мне их объяснить.

// in MyView add the new struct

struct UserRow: View {
    var user: User

    var body: some View {
        Text(user.name ?? "No name given")
    }
}


// then replace the list with

List {
    ForEach(users) { user in
        UserRow(user: user)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...