1

私は、ユーザーが(コアデータを使用して)ストアに送信し、MFMailComposeViewControllerクラスを使用して電子メールに添付したcsvファイルの形式でデータを送り返すことができるiOSアプリに取り組んでいます。

ファイルが送信された後、データを反復処理し、各レコードに送信済みフラグを設定して、ユーザーがボタンを押してさらにデータを送信したときにファイルが再度送信されないようにします。

これは簡単です-メソッドを呼び出して、内部からそれを行うことができます

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

使用する

    case MFMailComposeResultSent:

自分でクリーンアップし、送信後にcsvファイルも削除したいのですが、私の問題はこれです...(編集-下部の[その他のテスト後の編集]を参照)

MFMailComposeResultsSentは、メールが送信された場合と、メールが送信トレイに送信されて送信されていない場合の両方でMFMailComposeResultです。この時点でcsvファイルを削除し、インターネット接続がダウンしてメールが送信トレイにある場合、接続がバックアップされてメールが送信されると、添付ファイルはすでに削除されており、明らかに送信されません。

私のcsvファイルのサイズは小さく、1つのレコードの重量は約1kb、5は約2kb(最初の行がすべてのフィールド名であるための違い)であり、それに基づいて、ファイルがこれまでに大きくなる可能性はほとんどありません。 30kbよりも大きいので、大量のメモリを使用しません。現実的には、最も熱心なユーザーでさえ、0.5MBを超えるデータを生成するケースは見当たりません。

どのように私がこれに近づくことができる/すべきかについての考えはありますか?たくさんの小さなファイルを残しておくとリンゴがどのようなものになるのか、そしてこれが私のアプリの提出にどのように影響するのかわかりません。

これを読んだり返信したりするために時間を割いてくれてありがとう

サイモン

編集

時間遅延に問題があるようです-おそらくiOSは削除されたファイルをキャッシュしていますか?少しの間。

添付ファイルが通過するテストをたくさん実行しました。Wi-Fiをオフにして機内モードをオンにして送信をテストしてきましたが、ファイルをオンに戻した後、しばらくしてファイルが通過しました。Wi-Fiルートをオンのままにしてテストしたところ、まだ接続されていましたが、Wi-Fiルーターの背面からケーブルを引っ張ったため、背後にインターネットがありませんでした。ルーターに戻って接続すると、メールは行きました、それは添付ファイルを失いました、そして、メールはそれらなしで通り抜けました。今、私はたくさんのテストを持っています。半分は添付ファイルが通過し、半分は通過しませんでした。

より多くのテストの後に編集

私の質問は、いつ何が起こったのかについての私の誤解によって刺激された可能性がありますが、メールが実際に送信されたことを確認できるかどうかを確認したいので、質問に回答済みのマークを付けていません。提供された回答の1つは、「いいえ、不可能です」と言っています。他の誰かがこれを確認できたら、それを回答としてマークします。

ともかく

添付ファイルが失われるという私の問題は、メールが接続を見つけられなかったときにメールアプリにアクセスして送信トレイをチェックしたことが原因である可能性があります。メールがメールに警告面を追加したり、添付ファイルが消えたりすることがあります。送信トレイをそのままにしておくと、添付ファイルは正常に機能するように見えます。これについてさらにテストを行い、これが実際に当てはまることを確認します。

4

2 に答える 2

1

CSVファイルをメールにどのように添付しますか?ファイルのURLを指定する代わりに、NSDataを添付してみてください。そうすれば、添付ファイルは外部ファイルに関連付けられませんが、電子メール自体に埋め込まれます。

詳細については、MFMailComposeViewController addAttachmentDataをご覧ください。

例えば

NSData *csvData = [NSData dataWithContentsOfFile:filePath];

addAttachmentDataを使用して、csvDataをMFMailComposeViewControllerにアタッチします。

于 2013-03-08T09:54:21.903 に答える
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 に答える