我正在尝试使用XCode制作一个排序应用程序,并且正在努力弄清楚如何将数据存储在预先存在的JSON文件中。
JSON示例:
[
{
"id":1001,
"trackName":"Rain of Amethyst",
"intensity":0,
"album":"crystallized"
},
{
"id":1002,
"trackName":"Artificial Snow",
"intensity":0,
"album":"crystallized"
},
...
]
字符串.swift
文件:
import SwiftUI
import Disk
struct TrackRow: View {
var track: Track
var body: some View {
HStack {
Image(track.album)
.resizable()
.frame(width: 50, height: 50)
VStack(alignment: .leading) {
Text(track.trackName)
Text(track.album)
.foregroundColor(Color.gray)
}
Spacer()
Text(String(track.intensity))
.padding(.trailing)
.onTapGesture {
//Block of code here that somehow edits JSON data
}
}
}
}
...
型
如何将intensity
值替换为不同的整数?
我已经搜索了不同的文档和实现,没有一个看起来有效,尽管我承认作为一个新手,我可能在寻找错误的东西。
1条答案
按热度按时间eqoofvh91#
正如jnpdx提到的,你不能直接在bundle中编写JSON。
但是,CoreData可以帮助您永久保存您想要的数据。如果您不熟悉
CoreData
,这个解决方案可能有点复杂,但是它提供了一个结构化的数据结构。1.解析JSON文件并将结果保存到
CoreData
。字符串
1.将app中的.sqlite文件复制到项目目录。
(Do步骤1、2(仅当您更新JSON文件内容时)首先下载容器。.sqlite可能存在于
AppData/Documents
文件夹中。x1c 0d1x的数据1.获取所需的记录,然后更新
CoreData
中的intensity's
值。一些参考:CoreData fetch(_:)、CoreData insert(_:)和NSMergeByPropertyObjectTrumpMergePolicy
你可以试试Plan B:
当用户首次启动您的应用时,将JSON文件复制到
Documents directory
。始终读取/写入“Documents”目录中的文件。1.在
AppDelegate didFinishLaunchingWithOptions()
中检查Documents directory
中是否存在JSON。如果已存在,则跳过步骤2。1.使用
FileManager.default.copyItem()
将文件复制到Documents directory
。1.在
Documents directory
中解析JSON文件。1.按照您定义的
Track
模型修改intensity
。1.将其保存回
Documents directory
中的JSON文件。结论
CoreData
是强烈推荐当你需要处理一个大的JSON文件。**作为一款不错的应用,我们经常使用CoreData来帮助我们管理移动的设备中的数据库。**它的性能更好。另一方面,
Plan B
只适用于JSON大小非常小的情况,因为它每次都需要阅读/写入整个JSON文件。[注]解释清楚有点困难。如果你有任何问题,请尽管问。