Json SwiftUI:列表中的数据有时出现,有时不出现

Json SwiftUI:列表中的数据有时出现,有时不出现,json,swift,asynchronous,swiftui,swiftui-list,Json,Swift,Asynchronous,Swiftui,Swiftui List,我有个问题。在我的应用程序中,我使用设备的CoreData和设备的IP。我想发出一个API请求,从所选设备获取JSON数据并在列表中显示它们。我的问题是,当我更改数据时,它有时有效,有时无效,并且列表不会更新。我希望有人能帮助我 斯威夫特岛 结构BouquetAPIModel:可编码{ 让成功:字符串 let数据:数据类 } //标记:-数据类 结构数据类:可编码{ 让花束:[花束] } //马克:花束 结构花束:可编码{ 变量编号,名称:String } 斯威夫特 公共类设备:NSManage

我有个问题。在我的应用程序中,我使用设备的CoreData和设备的IP。我想发出一个API请求,从所选设备获取JSON数据并在列表中显示它们。我的问题是,当我更改数据时,它有时有效,有时无效,并且列表不会更新。我希望有人能帮助我

斯威夫特岛

结构BouquetAPIModel:可编码{ 让成功:字符串 let数据:数据类 } //标记:-数据类 结构数据类:可编码{ 让花束:[花束] } //马克:花束 结构花束:可编码{ 变量编号,名称:String } 斯威夫特

公共类设备:NSManagedObject,可识别{ @已发布的var花束:[花束]=[花束] func获取花束列表{ fetchAPIRequestapiPath:/control/getbouquets?format=json{res:Result-in 开关res{ 案例.成功花束: self.bouquets=bouquets.data.bouquets 案例。failurelet错误: 打印无法获取花束:,错误 } } } fileprivate func fetchAPIRequestapiPath:字符串,完成:@转义结果->{ 设urlString=getApiUrlapiPath:apiPath guard let url=URLstring:URLstring else{return} URLSession.shared.dataTaskwith:url{data,resp,err-in 如果让err=err{ 完成。失败错误 回来 } 做{ 让welcome=尝试JSONDecoder.decodeT.self,from:data! 完成,成功,欢迎 }接住让杰森罗{ completion.failurejsonError } }.简历 } 布克特维尤·斯威夫特

导入快捷键 结构BouquetView:视图{ @绑定var设备:设备? @状态变量花束:[花束]=[花束] var body:一些观点{ VStack{ TextStringdevice?.deviceName??fehler.ontaps手势{ 自我。装置?花束。先移除 printTouch } 列出self.bouquets,id:\Bouquet.name{Bouquet in VStackalignment:.引导{ Textbouquet.name } } }.onAppearperform:装载花束 } func loadBouquets{ 如果设备==nil{ //TODO jumo至设置 } 否则{ 设备?.fetchBouquetList self.bouquets=设备!.bouquets } } } 结构BouquetView\u预览:PreviewProvider{ 静态var预览:一些视图{ BouquetView设备:。康斯坦尼 } }
你能像下面那样更新你的设备吗

public class Device: ObservableObject, Identifiable {
...
}

在传递到BouquetView之前,请确保使用注释@ObservedObject声明您的设备。抓取可能会很长,因此您进入了比赛。为了避免这种情况,可以使用以下方法

1删除以下行,因为此时数据可能尚未准备就绪

self.bouquets = device!.bouquets
2为数据集添加显式侦听器

if device == nil {
    //TODO jumo to settings
    device!.$bouquets
       .assign(to: \.bouquets, on: self)
       .store(in: &cancellables) // << you will need to create this store var
}

带来错误:“设备”与协议“ObserveObject”的冗余一致性请尝试使用新更新,ObserverableObject符合类型NSManagedObject,因此请删除NSManagedObject然后我在另一个视图中获取类型“Device”与协议“NSFetchRequestResult”不一致,其中我对核心数据使用Fetchrequest。这是另一个场景io来处理核心数据。您可以尝试在这种情况下确保数据从服务器加载并在视图中更新。您可以创建一个新类来处理从服务器获取的数据。在if或in else中?在if中,因为loadBouquets可以像我假设的那样多次调用,但订户只需分配一次。但设备是never nilIt是您的代码…它是可选的。如果它从来都不是nil,那么为什么它是可选的?如果它不是,那么您可以将订户分配放在init中,就像在另一个视图中没有选择潜水时可以是nil一样,但我选择了一个。我尝试使用init