gpt4 book ai didi

iOS:从 JSON 切换到 CoreData 以保留本地持久数据;这实用吗?数组内的字典 数组内的字典

转载 作者:行者123 更新时间:2023-11-29 02:50:59 24 4
gpt4 key购买 nike

我上个月开始使用 Swift 和 iOS。我正在开发一款 iPhone 健身应用程序,专门用于举重。到目前为止,我一直在应用程序的文档文件夹中使用一个 JSON 文件来存储所有用户的锻炼,并使用 let workoutData = NSJSONSerialization.JSONObjectWithData( . . . ) as NSArray 从中加载数据文件(以类似 UITableView 的格式显示),然后添加新的锻炼条目:

let newEntry: NSData = NSJSONSerialization.dataWithJSONObject(newData, options: .PrettyPrinted, error: nil)
newEntry.writeToFile(documentsPath, atomically: true)

一开始效果很好,但现在我需要能够编辑锻炼、在任意日期添加新锻炼或删除特定锻炼。这需要在数组中的字典中的数组中进行大量循环,并且正确地对训练进行排序变得困难。

考虑到我的数据的性质,我觉得 CoreData 可能是 future 的最佳选择。也就是说,这是我的 JSON 数据库结构的示例:

    [
{
"day": "Thursday",
"date": "June 5 2014",
"lbs": true,
"lifts": [
{
"name": "SQUAT",
"sets": 1,
"reps": 5,
"weight": 205,
"warmup": true
},
{
"name": "SQUAT",
"sets": 3,
"reps": 5,
"weight": 245,
},
{
"name": "BENCH PRESS",
"sets": 1,
"reps": 5,
"weight": 135,
"warmup": true
},
{
"name": "BENCH PRESS",
"sets": 3,
"reps": 5,
"weight": 185
},
{
"name": "YATES ROW",
"sets": 3,
"reps": 5,
"weight": 135,
}
]
},
{
"day": "Wednesday",
"date": "June 3 2014",
"lbs": true,
"lifts": [
{
"name": "DEADLIFT",
"sets": 1,
"reps": 3,
"weight": 255,
"warmup": true
},
{
"name": "DEADLIFT",
"sets": 1,
"reps": 5,
"weight": 305,
},
{
"name": "OVERHEAD PRESS",
"sets": 1,
"reps": 5,
"weight": 95,
"warmup": true
},
{
"name": "OVERHEAD PRESS",
"sets": 3,
"reps": 5,
"weight": 125
},
{
"name": "CHIN-UPS",
"sets": 3,
"reps": 5,
"weight": 180,
}
]
},
{
"day": "Monday",
"date": "June 1 2014",
"lbs": true,
"lifts": [

]
}
]

所以结构是:

  1. 顶级数组,包含每个锻炼日字典
  2. 锻炼日字典,包含日期字符串、日期字符串和一组举重
  3. 电梯数组,每个电梯本身就是一本字典
  4. 举重字典,包含举重名称、组数、次数、重量和一个指示这是否为热身组的 bool 值。

CoreData 实体似乎只允许相当简单的属性。我想我可以使用“Transformable”属性,或者使用很多对多关系,但如果没有必要,我宁愿不去学习这些。

那么,我是否应该接受它并弄清楚如何在 CoreData 中实现同样的结构?或者,这个数据结构是不是太复杂了?我是否应该完全摆脱数组/字典,只拥有一个平面“锻炼”实体,然后从 CoreData 加载数据后,在 ViewController 中手动将所有相同日期/类型的锻炼收集到组中?

或者,鉴于我的数据的性质,是否有比 CoreData 或 JSON 更适合使用的东西?也许是 SQLite?

最佳答案

如果我是你,我会使用 CoreData 或 CloudKit(用于在线存储)。原因是如果我是用户并且我有跨越一年的锻炼和每次锻炼中的大量数据。这将永远加载到内存中。因此,无论如何您都必须想出一种方法来对数据进行分段,否则您的用户可能会等待一段时间才能将文件读入内存,或者文件可能会变得比分配的更大,但不会可以读入。

我不知道你为什么说很难将这些存储到数据库中。在我看来,您已经有了一个可以很容易地转换为 DBM 的结构。你的 table 我认为应该看起来像这样:

  • 锻炼:表 #1
    • wid(主键)
    • 日期(时间戳)
    • 提升(外键数组)
  • 升降机:表 #2
    • lid(主键)
    • 姓名(字符串)
    • 套(数)
    • 次数(次数)
    • 体重(数)
    • 热身( bool )

不要害怕数据库,它们真的没有那么糟糕,而且比将它们存储在文件中的效率高 1000%。

关于iOS:从 JSON 切换到 CoreData 以保留本地持久数据;这实用吗?数组内的字典 数组内的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24533851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com