ios - 由于 fetchedstatsarray 为空,我的 CSV 未完全生成,但为什么我的 fetchedstatsarray 为空?
问题描述
我有一个应用程序接收存储在核心数据中的用户输入。为了简化事情,我将用户输入的 5 个字符串组合在一起,用逗号分隔,然后这个长字符串作为 1 个实体存储在核心数据中。逗号分隔各个“字符串”是使其成为 CSV 的原因。但是,当我尝试导出 csv 文件时,我只设法获取了标题。
其中涉及的两个代码组件如下。收集字符串并组合它们的部分:
@objc func addAlarmItem(_ sender: AnyObject) {
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"
}
func save(_ itemName: String) {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "AlarmItem", in: managedContext)!
let item = NSManagedObject(entity: entity, insertInto: managedContext)
item.setValue(itemName, forKey: "alarmAttributes")
do {
try managedContext.save()
tableView.reloadData()
} catch let err as NSError {
print("Failed to save an item", err)
}
}
以及将核心数据输入为 csv 的部分:
@objc func exportCSV(_ sender: AnyObject) {
exportDatabase()
}
func exportDatabase() {
let exportString = createExportString()
saveAndExport(exportString: exportString)
}
func saveAndExport(exportString: String) {
let exportFilePath = NSTemporaryDirectory() + "itemlist.csv"
let exportFileUrl = NSURL(fileURLWithPath: exportFilePath)
FileManager.default.createFile(atPath: exportFilePath, contents: NSData() as Data, attributes: nil)
var fileHandle: FileHandle? = nil
do {
fileHandle = try FileHandle(forUpdating: exportFileUrl as URL)
} catch {
print("filehandle has error")
}
if fileHandle != nil {
fileHandle!.seekToEndOfFile()
let csvData = exportString.data(using: String.Encoding.utf8, allowLossyConversion: false)
fileHandle!.write(csvData!)
fileHandle!.closeFile()
let firstActivityItem = NSURL(fileURLWithPath: exportFilePath)
let activityViewController : UIActivityViewController = UIActivityViewController(activityItems: [firstActivityItem], applicationActivities: nil)
activityViewController.excludedActivityTypes = [
UIActivity.ActivityType.assignToContact,
UIActivity.ActivityType.saveToCameraRoll,
UIActivity.ActivityType.postToFlickr,
UIActivity.ActivityType.postToVimeo,
UIActivity.ActivityType.postToTencentWeibo
]
activityViewController.popoverPresentationController?.sourceView = self.view
activityViewController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection()
activityViewController.popoverPresentationController?.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)
self.present(activityViewController, animated: true, completion: nil)
}
}
func createExportString() -> String {
var alarmAttributes: String?
var export: String = NSLocalizedString("Engineer Name,Date of Alarm,Time of Alarm,True or False,Engineer Comments \n", comment: "")
for (index, AlarmItem) in fetchedStatsArray.enumerated() {
if index <= fetchedStatsArray.count - 1 {
alarmAttributes = AlarmItem.value(forKey: "alarmAttributes") as! String?
let alarmAttributeStrings = alarmAttributes
export += "\(alarmAttributeStrings ?? "0") \n"
}
}
print("the app will now print: \(export) ")
return export
}
我一生都无法弄清楚为什么我的 fetchedStatsArray 是空的。我已附加到我的 github 中的整个代码。
完整代码位于此处:https ://github.com/danialaqil/TFAApp/blob/master/AlarmChartsApp/HistoryController.swift如果您需要更详细地查看整个内容
解决方案
推荐阅读
- gnuplot - 如何使用 GNUPLOT 为多列(比如 50)制作填充颜色等高线图
- java - 系统中不存在 TESTNG_HOME 环境变量,但 testNG 套件仍在运行
- c# - 如何在nopcommerce c#中的linq查询中将日期时间转换为日期
- arrays - 从 NodeJS 中的复杂 JSON 字符串中获取值
- botframework - 错误:输入的授权令牌无法为请求提供服务。使用本地模拟器和 Microsoft Bot Framework V4 Bot
- java - 字符串二叉搜索树
- c# - 包含包含的 EF LINQ 查询返回并非所有匹配的记录
- codenameone - 使用代号一的文本输入期间的基本文本格式
- node.js - 使用 nodejs 将文件复制到 NFS NAS,读/写流包含在 promise 中
- android-studio - Android Studio 模拟器没有正确显示颜色