在 Swift 中存储和引用绘图数据以在 UITableView 中使用的最佳方式
Posted
技术标签:
【中文标题】在 Swift 中存储和引用绘图数据以在 UITableView 中使用的最佳方式【英文标题】:Best way to store and refrence lots data in Swift for use in a UITableView 【发布时间】:2020-05-07 23:08:27 【问题描述】:这有点令人困惑,所以我很抱歉。但: 我正在尝试制作一个应用程序,用户能够将项目添加到单个项目列表中,这些项目将作为表格视图显示给他们(类似于待办事项列表应用程序的行)。
但是,我遇到了一个障碍,我需要为列表中的每个项目(一些字符串、一些整数和一个日期)存储几个不同的数据位。
我认为类(或结构)将是执行此操作的最佳方法,其中类的实例保存每个项目所需的信息,然后该实例的名称存储在列表中以便可以访问通过表视图中的 indexPath。
但是,我不知道如何为每个项目创建一个新的类实例,因为该应用可能有数百个单独的项目。
对不起,这太令人困惑了,我们将不胜感激!欢迎询问更多信息
编辑:我在寻找什么,我确信有一种愚蠢的简单方法,但我试图弄清楚当类的名称存储在变量中时如何创建类的实例. Ecencialy 我希望类的实例来存储项目。在用户输入要添加到表格的项目时创建。
例如。他们输入一个项目。 item1 以及随之而来的其他数据我希望能够将其存储在 item 类的实例中,但我不知道如何命名该实例,因为我想要的名称是 item 1 存储在一个变量。
抱歉,这让我很困惑,所以我需要帮助
【问题讨论】:
嗨!在眨眼之间机械地创建数百或数千个实例几乎是现代计算机真正擅长的一件事。在正常情况下,ios 设备在内存中保存大量数据模型以将它们显示在表格中不会有任何问题。那么你的问题/问题到底是什么?是如何从用户输入的数据中创建对象或结构?如何迭代大量项目?如何持久存储对象数据,然后再次读取(例如重新启动应用程序后)?如何从您存储的对象中填充您的表格? 一般来说,根据您对应用创意的描述,我建议您查看this nice tutorial by Apple。似乎他们构建的东西与您想要实现的目标非常相似:用户可以输入复杂的数据,这些数据由应用程序存储并显示在表格中。 我建议你看看Core Data;它是 iOS 中可用的内置对象持久性系统;就学习 TableViews 而言,Apple 教程很好,但它们坚持使用 plist,这可能不是最好的方法;我只是认为他们想让他们的教程简单,因为 Core Data 也有一些学习曲线。您甚至可以使用NSFetchedResultsController
部分自动化您的表链接到核心数据存储
我重申了我所说的
我很抱歉,但在您改述的问题中,我没有得到对象实例与其“名称”之间的关系。为什么需要单独存储“名称”,而不是在创建后直接存储整个对象及其所有数据?
【参考方案1】:
首先:您不能将类的名称存储在变量中并使用此变量来获取类的新实例。
您需要的是一个包含所有不同项目的数组。该数组是无限的,因此您可以在其中存储任意数量的项目,而无需为每个实例设置名称。
首先创建一个包含所有
Items
作为属性的空数组:
var items : [Item] = []
第二次调用
populateItemArray()
中的函数viewDidLoad()
:
private func populateItemArray()
// Populate the items Array (Are you using CoreData, Realm, ...?)
第三,使用 Item Array 填充 TableView。 记住:如果您只使用 tableView 中的一个部分,
indexPath.row
始终等于数组中的相应项。 例如。items[indexPath.row]
希望对您有所帮助!
更新:
看看这个例子结构
Item
。如您所见,您还可以在其中存储日期:
struct Item
// First create all the properties for your struct.
var data1: String
var data2: Int
var data3: String
// You can create properties of any type you want, also of type date.
var dateOfCreation : Date
// Then implement all the methods of your custom Struct Item.
func setDate(with date : Date)
self.dateOfCreation = date
func returnDate() -> Date
return self.dateOfCreation
【讨论】:
谢谢,但我需要存储一个只能通过结构或类来完成的日期,我相信如果我错了,请纠正我,这是我提出愚蠢问题的错,我尝试在这里重新表述它: ***.com/questions/61707272/… 但我不认为它有帮助,非常感谢。 @Jaxsonpd 首先没有转储问题,所以请随意使用这个平台来变得越来越好。其次,您正在创建一个 [Item] 类型的数组,这意味着您可以在该数组中存储无限的 Item 对象(结构或类),并且每个 Item 对象都可以包含一个 date 类型的属性 @Jaxsonpd 我在上面更新了我的答案。请随意查看。 谢谢伙计,我正在寻找的是 var items : [item]() @Jaxsonpd 很高兴听到这个消息,请随时将此答案标记为结束此问题的解决方案。以上是关于在 Swift 中存储和引用绘图数据以在 UITableView 中使用的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章
Swift - UIButton 覆盖 setSelected