SwiftUI:尝试加载本地 JSON 数据时,Canvas 出现预览错误
Posted
技术标签:
【中文标题】SwiftUI:尝试加载本地 JSON 数据时,Canvas 出现预览错误【英文标题】:SwiftUI: I get a preview error in the Canvas when trying to load local JSON Data 【发布时间】:2019-10-23 11:32:49 【问题描述】:我目前正在尝试在我的应用程序的 .json
文件中以本地 Data
开始学习 JSON。我按照在线说明构建了一个示例行,然后将其放入列表中。 Data
来自我按照正确格式创建的 .json
文件。
当我尝试在 Canvas 中预览作品时,我收到一条错误消息:
无法在此文件中预览 - JSON Practice.app 可能已崩溃。
我是 SwiftUI 的新手,也是动态列表和 JSON 数据的新手,所以也许社区中的某个人可以告诉我哪里出错了。我在网上到处找,但找不到我的问题的答案。
在网上搜索了类似的项目或教程,到目前为止我看不出代码有什么不同。我还查看了来自 Apple 的 SwiftUI Tutorials
的列表和导航,它显示了如何在本地从 JSON 文件读取数据,但即使我使用的代码几乎相同,我也会收到此错误。
我的 JSON 文件如下所示:
[
"id": 0,
"name": "Salzburg",
"image": "salzburg",
"detail": "A small but beautiful Town in upper Austria",
,
"id": 1,
"name": "Vienna",
"image": "Vienna",
"detail": "The Capital of Austria",
,
"id": 2,
"name": "Linz",
"image": "Linz",
"detail": "The third largest town in Austria",
]
我的数据文件如下所示:
import SwiftUI
let citiesData: [City] = load("cities.json")
func load<T: Decodable>(_ filename: String, as type: T.Type = T.self) -> T
let data: Data
guard let file = Bundle.main.url(forResource: filename, withExtension: nil) else
fatalError("Couldn't find \(filename) in main bundle.")
do
data = try Data(contentsOf: file)
catch
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
do
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
catch
fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
我的解码器(不确定是不是它的名字)文件看起来像这样:
import SwiftUI
struct City: Hashable, Codable, Identifiable
var id: Int
var name: String
var image: String
var detail: String
我的行文件看起来像这样:
import SwiftUI
struct CityRow: View
var city: City
var body: some View
Text(city.name)
struct CityRow_Previews: PreviewProvider
static var previews: some View
CityRow(city: citiesData[1])
预览 Row 文件时,它应该显示第一个城市名称,但它却给了我上面提到的错误。
【问题讨论】:
【参考方案1】:你的json数组中只有一个值,试试
struct CityRow_Previews: PreviewProvider
static var previews: some View
CityRow(city: citiesData[0])
【讨论】:
感谢您的回复,我编辑了帖子以显示整个 .json 文件。我之前只发布了一个块来表明它是正确的。【参考方案2】:好的,这些是我觉得我真的很愚蠢的时刻。原来 JSON 文件的格式很糟糕,在详细信息行之后不应该有 ,
感谢您阅读并尝试提供帮助。我希望下一个人能看到这个并比我更快地解决它
【讨论】:
【参考方案3】:对我来说,json 文件没有复制到捆绑资源中。为此:
点击您的项目 点击您的目标 选择构建阶段 扩展复制捆绑资源 点击“+”并选择您的文件。【讨论】:
以上是关于SwiftUI:尝试加载本地 JSON 数据时,Canvas 出现预览错误的主要内容,如果未能解决你的问题,请参考以下文章
在 SwiftUI 中将加载的 json 文件中的更改保存到 Core Data