【问题标题】:Swiftui List Update issueSwiftui 列表更新问题
【发布时间】:2021-06-26 23:37:48
【问题描述】:

//附加的数据实际上是来自推送通知的数据,它将在列表视图中附加新的通知 问题是更新数组中的数据后,即使日期已成功添加到数组中,视图也不会更新。//

//这是我的观点和方法//

struct ContentView: View {

    
    @ObservedObject var notification = OnlyNotification()
    
    var body: some View {
        NavigationView{
                List{
                    ForEach(notification.data, id: \.id){ Message in
                    NotificationCell(Message:Message)
                }
            }
        }
    }
}

struct NotificationCell: View {
    let Message:MyNotification
    var body: some View {
        NavigationLink(destination: Text(Message.name)){
            Image(Message.imageName)
                .cornerRadius(40)
                .overlay(RoundedRectangle(cornerRadius: 40)
                            .stroke(Color.gray, lineWidth: 1))
            VStack(alignment: .leading) {
                Text(Message.name)
                    .font(.headline)
                Text(Message.ImageLink)
                    .font(.subheadline)
                    .foregroundColor(Color.gray)
            }
        }.navigationBarTitle(Message.name)
    }
}
struct MyNotification:Identifiable {
    var id = UUID()
    var name:String
    var ImageLink:String
    var Message:String
    var imageName:String {return name}
    
}
class OnlyNotification: ObservableObject{
    @Published var data = [MyNotification]()
    init() {
        let notification1 = MyNotification(name: "Rafael Nadal", ImageLink: "New", Message: "Hi Budy")
        addnotification(Data: notification1)
    }
    public func addnotification(Data:MyNotification){
        self.data.insert(MyNotification(name: Data.name, ImageLink: Data.ImageLink, Message: Data.Message), at: 0)
    }
    public func getData() ->[MyNotification] {
        return data
    }
    
}

// 从 AppDelegate 追加项目// 让 obj = OnlyNotification()

 obj.addnotification(Data: MyNotification(name: "\(notification.request.content.userInfo["Name"]!)", ImageLink: "New", Message: "\(notification.request.content.userInfo["Message"]!)"))

【问题讨论】:

    标签: listview swiftui observable


    【解决方案1】:

    您正在显示来自“ContentView @ObservedObject var notification = OnlyNotification()”的数据, 但是在您的代码的其他地方,您正在使用另一个“let obj = OnlyNotification()”并添加到它。 它们是不同的对象。

    【讨论】:

    • 对不起,我是新手,您能告诉我如何实例化 globalay 类的对象,以便我可以在应用程序委托中使用它
    • 如果没有“AppDelegate”代码,很难说出你想做什么以及如何调用它,但试试这个:在你的“AppDelegate”视图中,像这样声明 obj:“@ObservedObject var obj:只有通知”
    • 我在 AppDelegate 中获取 FCM Payload,并从那里将有效负载映射到 Observable 类,该类具有将数据添加到已发布数组的功能,然后用于创建通知视图
    • @ObservedObject var obj = OnlyNotification() 这无济于事我已经使用它仍然视图没有更新,但数据已成功添加到数组中
    • 那不是我建议你做的。这就是我的建议:“@ObservedObject var obj: OnlyNotification”而不是“@ObservedObject var obj = OnlyNotification()”
    【解决方案2】:

    在类外全局声明对象

    var Myinstance:OnlyNotification?

    然后在类的初始化器中 这样做

    我的实例 = 自我

    然后在任何地方访问这个全局实例来访问同一个实例的类的函数和对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      相关资源
      最近更新 更多