Ios Swift从UITableView创建CSV并附加到电子邮件
我刚开始使用Swift(以及一般的编程),并试图为我工作的公司创建一个简单的订单列表电子邮件应用程序 我的应用程序的基础来自Envato Tuts+Swift购物清单教程 我知道这个问题已经被问过无数次了,我已经尝试了很多次,但是对于如何将我的Ios Swift从UITableView创建CSV并附加到电子邮件,ios,swift,uitableview,csv,Ios,Swift,Uitableview,Csv,我刚开始使用Swift(以及一般的编程),并试图为我工作的公司创建一个简单的订单列表电子邮件应用程序 我的应用程序的基础来自Envato Tuts+Swift购物清单教程 我知道这个问题已经被问过无数次了,我已经尝试了很多次,但是对于如何将我的UITableView列表数据获取到CSV文件并附加它,我不知所措 下面是我的ShoppingListViewController.swift文件内容,我在其中加入了一个按钮来启动MFMailComposeViewControllerDelegate 有人
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
}
}
尝试下面的代码,它可能有助于生成csv字符串文件
感谢您深思熟虑的回答,我在stackoverflow的帮助下解决了一些问题,现在使用以下代码成功地从UITableView附加了一个包含my item.name对象的CSV
@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
}
我是如此接近这是可笑的,但我不能处理一个没有订单数量收到的订单。
我现在遇到的问题是,如何将item.quantity对象与其item.name对象一起放入csv
当我打印(item.name、item.quantity)时,我将它们放在输出中,但在转换为NSData时将它们加在一起,我只在csv中获得item.name。
我还更新了我的第一篇文章中的代码,直到现在为止。你为什么评论了
//mailComposerVC.addAttachmentData
?你已经发布了一堆代码,但没有解释问题所在。请更新您的问题,并用代码解释您的实际问题。请说得具体一点。@Shubhank,那是之前测试的遗留问题,效果不太好……如果你在这一部分要求帮助,这将是一个更好的问题,而不是简单地问如何创建csv。实际上,我真正需要的是,按下按钮后,shoppinglist uitableview的文本内容将显示在电子邮件的邮件正文中。当我“打印(项目)”时,输出中会出现十六进制值,例如[,],而不是文本值。转换为csv和附加将是一个巨大的奖金,但实际上并不是必要的。
@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
}