【问题标题】:How to get the coreData property and pass it to another view through navigationLink如何获取 coreData 属性并通过 navigationLink 将其传递给另一个视图
【发布时间】:2020-08-20 20:02:00
【问题描述】:

我想列出 coreData 对象,然后将它的属性传递给另一个视图。但是错误显示我无法通过 NavigationLink 获取 coreData 对象的属性以将其传递给 AnotherView。

struct StartView: View {
    @Environment(\.managedObjectContext) var moc
    @FetchRequest(entity: User.entity(), sortDescriptors: []) var users: FetchedResults<User>
    
    var body: some View {
        List {
            ForEach(self.users, id: \.id) { user in
                NavigationLink(destination: AnotherView(userID: user.id)) { // Value of type 'NSManagedObject' has no member 'id'
                    Text(user.name ?? "unknown name")                       // Value of type 'NSManagedObject' has no member 'name'
                }
            }
        }
    }
}

struct AnotherView: View {
    var userID: String
    var body: some View {
        Text("The userID is \(userID)")
    }
}

【问题讨论】:

  • 如果用户存在并且这些成员是有效的,那么它可能是自动生成界面的问题。尝试重启 Xcode、clean-rebuild 等

标签: core-data swiftui


【解决方案1】:

我尝试了解决它。

struct StartView: View {
    @Environment(\.managedObjectContext) var moc
    @FetchRequest(entity: User.entity(), sortDescriptors: []) var users: FetchedResults<User>
    @State private var userID: String = ""
    
    var body: some View {
        List {
            ForEach(self.users, id: \.id) { user in
                NavigationLink(destination: AnotherView(userID: userID)) {
                    Button(action: {
                        self.userID = user.id!.uuidString
                    }) {
                        Text(user.name ?? "unknown name")
                    }
                }
            }
        }
    }
}

【讨论】:

    【解决方案2】:

    我建议您将核心数据实体直接推送到下一个视图。

    更改 AnotherView 以接受用户实体的实例。

    struct AnotherView: View {
        var user: User
        var body: some View {
            Text("The userID is \(user.id)")
        }
    }
    

    然后将用户对象传递给该视图。

    ForEach(self.users, id: \.id) { user in
        NavigationLink(destination: AnotherView(user: user)) { // Value of type 'NSManagedObject' has no member 'id'
            Text(user.name ?? "unknown name")                       // Value of type 'NSManagedObject' has no member 'name'
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 2019-05-08
      相关资源
      最近更新 更多