arrays - 如何从 CoreData TableView 数组中提取 Data Array,将其放入新的 Array 并将其导出为 csv?
问题描述
我有一个应用程序接受用户输入alertController
,然后这些值将存储在CoreData
其中,然后显示在tableview
. 我将所有字符串连接起来,以逗号作为分隔符,以便我更轻松地导出 csv。但是,当我打印出 CoreData 实体时,我得到一个非常复杂的数组。数组如下所示:
[(实体:AlarmItems;id:0xc2bccd37cb753acb;数据:{alarmAttributes =“示例名称,2019 年 11 月 24 日,1500,True,NIL”;}),(实体:AlarmItems;id:0xc2bccd37cb653acb;数据:{alarmAttributes =“示例,2019 年 12 月 12 日,2019 年 11 月 24 日,真,无”;})]
我想alarmAttributes
在导出到 CSV 后仅提取这些部分以供进一步使用。
我看了看,NSEntityMapping
但这对我没有帮助。我现在很困。我不知道如何解决这个问题。我的方法首先是否正确?甚至可以使用我创建的数组导出 csv 吗?这个想法是将 csv 存储在 iOS 设备中,然后可以通过电子邮件发送到其他地方。
我的视图控制器:
class ViewController: UITableViewController {
var alarmItems: [NSManagedObject] = []
let cellId = "cellId"
override func viewDidLoad() {
super.viewDidLoad()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "AlarmItems")
do {
alarmItems = try managedContext.fetch(fetchRequest)
} catch let err as NSError {
print("Failed to fetch items", err)
}
}
@objc func addAlarmItem(_ sender: AnyObject) {
print("this works")
let alertController = UIAlertController(title: "Add New Item", message: "Please fill in the blanks", preferredStyle: .alert)
let saveAction = UIAlertAction(title: "Save", style: .default) { [unowned self] action in
//combined string of attributes
let myStrings: [String] = alertController.textFields!.compactMap { $0.text }
let myText = myStrings.joined(separator: ", ")
self.save(myText)
self.tableView.reloadData()
}
let cancelAction = UIAlertAction(title: "Cancel", style: .destructive, handler: nil)
alertController.addTextField { (textField) in
textField.placeholder = "Enter Name of Engineer"
}
alertController.addTextField { (textField) in
textField.placeholder = "Enter Date of Alarm in DD/MM/YYYY"
}
alertController.addTextField { (textField) in
textField.placeholder = "Enter Time of Alarm in 24h (eg: 2300)"
}
alertController.addTextField { (textField) in
textField.placeholder = "Please indicate True/False (type True or False)"
}
alertController.addTextField { (textField) in
textField.placeholder = "Insert comments (if any), or NIL"
}
alertController.addAction(saveAction)
alertController.addAction(cancelAction)
present(alertController, animated: true, completion: nil)
}
func save(_ itemName: String) {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "AlarmItems", in: managedContext)!
let item = NSManagedObject(entity: entity, insertInto: managedContext)
item.setValue(itemName, forKey: "alarmAttributes")
do {
try managedContext.save()
alarmItems.append(item)
} catch let err as NSError {
print("Failed to save an item", err)
}
}
@objc func exportCSV(_ sender: AnyObject) {
//will work on exporting csv in the future
return
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return alarmItems.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)
let alarmItem = alarmItems[indexPath.row]
cell.textLabel?.text = alarmItem.value(forKeyPath: "alarmAttributes") as? String
return cell
}
}
解决方案
推荐阅读
- serilog - Serilog Elasicsearch Sink - 自定义索引模板映射被忽略
- html - 如何使所有div框高度相同
- python - KeyError: 0 in pandas
- python - telethon.errors.rpcerrorlist.PeerIdInvalidError:使用了无效的 Peer。确保传递正确的对等类型(由 SendMessageRequest 引起)
- reactjs - 我的检查员中未使用 API_KEY 错误
- python - 从多线程函数中获取返回
- promise - Javascript Promise resolve 方法在控制台中打印。如何?
- python - 您可以通过 Tkinter 接口读取和写入 exe 文件吗
- c++ - Clang C++ 程序未在 Windows 上运行
- github - 使用 API 在工作流运行/github 操作之间共享工作流工件