xcode 如何在Swift中用磁盘替换数据

yyhrrdl8  于 2023-08-07  发布在  Swift
关注(0)|答案(1)|浏览(139)

我正在尝试使用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值替换为不同的整数?
我已经搜索了不同的文档和实现,没有一个看起来有效,尽管我承认作为一个新手,我可能在寻找错误的东西。

eqoofvh9

eqoofvh91#

正如jnpdx提到的,你不能直接在bundle中编写JSON。
但是,CoreData可以帮助您永久保存您想要的数据。如果您不熟悉CoreData,这个解决方案可能有点复杂,但是它提供了一个结构化的数据结构。
1.解析JSON文件并将结果保存到CoreData

let decoder = JSONDecoder()
    do {
        let result = try decoder.decode([Track].self, from: data)
        // CoreData insert
    } catch {
        print(error)
    }
       
    struct Track: Codable {
        var id: Int
        var trackName: String
        var intensity: Int
        var album: String
    }

字符串
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文件。
[注]解释清楚有点困难。如果你有任何问题,请尽管问。

相关问题