1

我正在开发一个 iOS 应用程序,该应用程序允许用户发送到存储(使用核心数据)并以我使用 MFMailComposeViewController 类附加到电子邮件的 csv 文件的形式发回数据。

发送文件后,我想遍历数据并在每条记录上设置一个提交标志,这样当用户点击按钮提交更多数据时,它就不会再次发送

这很容易做到——我可以从内部调用方法来做到这一点

    -(void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{

使用

    case MFMailComposeResultSent:

我想自己清理并在发送后删除 csv 文件,但我的问题是......(编辑 - 请参阅底部的更多测试后编辑)

MFMailComposeResultsSent 是 MFMailComposeResult ,如果邮件已发送,并且如果它已发送到发件箱但尚未发送。如果此时我删除了 csv 文件并且互联网连接已关闭并且邮件在发件箱中,那么当连接恢复并发送邮件时,附件已被删除并且显然不会发送。

我的 csv 文件的大小很小 - 一条记录大约 1kb,5 条大约 2kb(因为第一行是所有字段名称的差异),在此基础上,任何文件都不太可能更大超过 30kb,所以我不会使用大量内存。实际上,我看不到任何情况下,即使是最热情的用户也会生成超过半 MB 的数据

有什么想法我可以/应该如何解决这个问题?我不确定苹果对留下一堆小文件会采取什么态度,以及这可能会如何影响我的应用程序提交。

提前感谢您花时间阅读和/或回复此内容

西蒙

编辑

时间延迟似乎存在一些问题 - 也许 iOS 正在缓存已删除的文件?短暂的时间。

我进行了一系列测试运行,附件通过了 - 我一直在测试在 wifi 关闭和飞行模式打开的情况下发送,并且文件在我重新打开它们后不久就通过了。我刚刚测试了我在哪里打开了 wifi 路由,但我仍然连接着,但是从 wifi 路由器的背面拔了电缆,所以我后面没有互联网当我回到路由器并插入它的时候mail went ,它丢失了附件文件,邮件在没有它们的情况下通过。现在我有一堆测试,一半是附件通过,一半是附件没有

更多测试后编辑

我的问题可能是由于我对何时发生的事情的误解而引发的——但我没有将问题标记为已回答,因为我仍然想知道是否可以检查邮件是否真的已经消失。一个提供的答案说不,它不可能 - 其他任何人都可以确认这一点,然后我将其标记为答案。

反正

我认为丢失附件的问题可能来自进入邮件应用程序并在邮件无法找到连接时检查发件箱。有时 Mail 会在邮件上添加警告面,附件有时会消失。如果我不理会发件箱,附件似乎会正常运行。我将对此进行更多测试以确认情况确实如此。

4

2 回答 2

1

不幸的是,没有办法检查。

MFMailComposeResultSent

The email message was queued in the user’s outbox. It is ready to send the next time the user connects to email.

表示在消息排队等待发送(仍在发件箱中)时会得到此结果,发送后不会产生结果。

MFMailComposeViewController了解详情。

于 2013-03-08T09:54:09.210 回答
1

您如何将 CSV 文件附加到电子邮件中?您可以尝试附加 NSData,而不是指定文件 URL。这样,您的附件就不会绑定到外部文件,而是嵌入到电子邮件本身中。

查看MFMailComposeViewController addAttachmentData更多详细信息。

例如

NSData *csvData = [NSData dataWithContentsOfFile:filePath];

使用 addAttachmentData 将 csvData 附加到您的 MFMailComposeViewController。

于 2013-03-08T09:54:21.903 回答