我刚刚开始使用 Swift(以及一般编程),并尝试为我工作的公司创建一个简单的订单列表电子邮件应用程序。
我的应用程序的基础来自 Envato Tuts+ Swift 购物 list 教程。
我知道这个问题已经被问过一百万次了,我已经尝试了很多次,但我不知道如何将我的 UITableView
列表数据放入 CSV 文件并附加它。
下面是我的 ShoppingListViewController.swift 文件内容,其中我添加了一个按钮来启动 MFMailComposeViewControllerDelegate
。
有人可以让我走上正轨吗?
import UIKit
import MessageUI
import Foundation
class ShoppingListViewController: UITableViewController, MFMailComposeViewControllerDelegate{
var convertMutable: NSMutableString!
func showSendMailErrorAlert()
{
let sendMailErrorAlert = UIAlertController(title: "Could Not Send Email", message: "Your device could not send e-mail. Please check e-mail configuration and try again.", preferredStyle: .Alert)
self.presentViewController(sendMailErrorAlert, animated: true, completion: nil)
}
func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?)
{
controller.dismissViewControllerAnimated(true, completion: nil)
}
@IBAction func sendMailButtonTapped(sender: AnyObject){
print("Email Tapped")
convertMutable = NSMutableString();
for item in shoppingList
{
convertMutable.appendFormat("%@\r", item.name, item.quantity)
}
print("NSMutableString: \(convertMutable)")
let data = convertMutable.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
if let d = data {
print("NSData: \(d)")
}
func configuredMailComposeViewController() -> MFMailComposeViewController{
let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setToRecipients(["mh@derivan.com.au"])
mailComposerVC.setSubject("From the Orders App")
mailComposerVC.setMessageBody(String (items), isHTML: false)
mailComposerVC.addAttachmentData(data!, mimeType: "text/csv", fileName: "Order.csv")
return mailComposerVC
}
let mailComposeViewController = configuredMailComposeViewController()
if MFMailComposeViewController.canSendMail()
{
self.presentViewController(mailComposeViewController, animated: true, completion: nil)
}
else
{
self.showSendMailErrorAlert()
}
}
let CellIdentifier = "Cell Identifier"
var items = [Item]() {
didSet {
buildShoppingList()
}
}
var shoppingList = [Item]() {
didSet {
tableView.reloadData()
//print (items)
}
}
override func viewDidLoad() {
super.viewDidLoad()
title = "Order List"
loadItems()
tableView.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: CellIdentifier)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ShoppingListViewController.updateShoppingList(_:)), name: "ShoppingListDidChangeNotification", object: nil)
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return shoppingList.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(CellIdentifier, forIndexPath: indexPath)
let item = shoppingList[indexPath.row]
cell.textLabel?.text = item.name
cell.detailTextLabel?.text = String(format: "%.0f", item.quantity)
print (item.name, item.quantity)
return cell
}
func updateShoppingList(notification: NSNotification) {
loadItems()
}
func buildShoppingList() {
shoppingList = items.filter({ (item) -> Bool in
return item.inShoppingList
})
}
private func loadItems() {
if let filePath = pathForItems() where NSFileManager.defaultManager().fileExistsAtPath(filePath) {
if let archivedItems = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? [Item] {
items = archivedItems
}
}
}
private func pathForItems() -> String? {
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
if let documents = paths.first, let documentsURL = NSURL(string: documents) {
return documentsURL.URLByAppendingPathComponent("items").path
}
return nil
}
}
最佳答案
Try The Below Code It may help for generate csv string file
func configuredMailComposeViewController() -> MFMailComposeViewController {
let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setSubject("My app Data")
mailComposerVC.setMessageBody("my app doc csv", isHTML: false)
let csvStringData = generateStringForCSV()
let data = csvStringData.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
mailComposerVC.addAttachmentData(data!, mimeType: "text/csv", fileName: fileName)
return mailComposerVC
}
func generateStringForCSV (currentSessionData:[String:String]) -> NSMutableString {
let delimiter = ","
let stringData:NSMutableString = NSMutableString()
let currentSessionData = sensorHeader + sensorsData
for data in currentSessionData {
stringData.appendString(data.0)
stringData.appendString(delimiter)
stringData.appendString(data.1)
stringData.appendString("\n")
}
return stringData
}
关于ios - Swift 从 UITableView 创建 CSV 并附加到电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37247639/