ios – 如何从Core Data创建CSV文件(swift)

前端之家收集整理的这篇文章主要介绍了ios – 如何从Core Data创建CSV文件(swift)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个带有核心数据的应用程序(1个具有5个属性的实体),它们显示在tableView中.现在我想将这些数据导出到CSV文件(所以我可以通过电话发送此文件),这样我就可以在 windows上的excel中打开它.我搜索了很多,但没有找到正确的答案.有人可以帮助我或给我一个良好的解释或教程的链接

我正在快速地建造.

  1. func createExportString() -> String {
  2. var merk: String?
  3. var ref: String?
  4. var beschrijving: String?
  5. var aantal: String?
  6. var wbs: String?
  7.  
  8. var export = NSLocalizedString("merk,ref,beschrijving,aantal,wbs \n",comment: "")
  9. merk = Lijst.valueForKey("merk") as? String
  10. ref = Lijst.valueForKey("ref") as? String
  11. aantal = Lijst.valueForKey("aantal") as? String
  12. beschrijving = Lijst.valueForKey("beschrijving") as? String
  13. wbs = Lijst.valueForKey("wbs") as? String
  14.  
  15.  
  16. let merkString = "\(merk!)" ?? "-"
  17. let refString = "\(ref!)" ?? "-"
  18. let beschString = "\(beschrijving!)" ?? "-"
  19. let aantalString = "\(aantal!)" ?? "-"
  20. let wbsString = "\(wbs!)" ?? "-"
  21.  
  22. export += merkString + "," + refString + "," + beschString + "," + aantalString +
  23. "," + wbsString + "\n"
  24.  
  25. print("This is what the app will export: \(export)")
  26. return export
  27. }
  28.  
  29. @IBAction func saveToCSV(sender: AnyObject) {
  30. exportDatabase()
  31. }
  32.  
  33. func exportDatabase() {
  34. var exportString = createExportString()
  35. saveAndExport(exportString)
  36. }
  37.  
  38. func saveAndExport(exportString: String) {
  39. let exportFilePath = NSTemporaryDirectory() + "export.csv"
  40. let exportFileURL = NSURL(fileURLWithPath: exportFilePath)
  41. NSFileManager.defaultManager().createFileAtPath(exportFilePath,contents: NSData(),attributes: nil)
  42. var fileHandleError: NSError? = nil
  43. var fileHandle: NSFileHandle? = nil
  44. do {
  45. fileHandle = try NSFileHandle(forWritingToURL: exportFileURL)
  46. } catch {
  47. print( "Error with fileHandle")
  48. }
  49.  
  50. if fileHandle != nil {
  51. fileHandle!.seekToEndOfFile()
  52. let csvData = exportString.dataUsingEncoding(NSUTF8StringEncoding,allowLossyConversion: false)
  53. fileHandle!.writeData(csvData!)
  54.  
  55. fileHandle!.closeFile()
  56.  
  57. let firstActivityItem = NSURL(fileURLWithPath: exportFilePath)
  58. let activityViewController: UIActivityViewController = UIActivityViewController(activityItems: [firstActivityItem],applicationActivities: nil)
  59.  
  60. self.presentViewController(activityViewController,animated: true,completion: nil)
  61. }
  62. }

解决方法

这是一种简洁的方法,可以完成所有操作 – 传递托管对象数组和CSV文件名字符串.该方法将CSV写入文件.我相信你的代码已经有了大部分内容,缺少的是最后两行,只是将字符串写入“Documents”目录中的新文件.
  1. func writeCoreDataObjectToCSV(objects: [NSManagedObject],named: String) -> String {
  2. /* We assume that all objects are of the same type */
  3. guard objects.count > 0 else {
  4. return
  5. }
  6. let firstObject = objects[0]
  7. let attribs = Array(firstObject.entity.attributesByName.keys)
  8. let csvHeaderString = (attribs.reduce("",combine: {($0 as String) + "," + $1 }) as NSString).substringFromIndex(1) + "\n"
  9.  
  10. let csvArray = objects.map({object in
  11. (attribs.map({(object.valueForKey($0) ?? "NIL").description}).reduce("",combine: {$0 + "," + $1}) as NSString).substringFromIndex(1) + "\n"
  12. })
  13. let csvString = csvArray.reduce("",combine: +)
  14.  
  15. return csvHeaderString+csvString
  16. }

现在,在代码中的其他地方,您需要从此字符串创建NSData并将其添加邮件编辑器:

  1. let csvString = .....
  2. let data = csvString.dataUsingEncoding(NSUTF8StringEncoding)
  3. let composer = MFMailComposeViewController()
  4. composer.addAttachmentData(attachment: data,mimeType mimeType: "text/csv",fileName filename: "mydata.csv")

然后,用作曲家(设置正文,主题等)做常用的东西并将其呈现给用户

编辑:

编辑答案以更好地回答这个问题.

猜你在找的iOS相关文章