0

MFMailComposeViewController を使用して電子メールを送信しています。
しかし、メモリ不足のため、大きな添付ファイルを送信するとクラッシュしました。
「メール」は添付ファイルにメモリを割り当てますか?
で、どうすればいいの

>
Dec  3 11:57:36 unknown kernel[0] <Debug>: launchd[1507] Builtin profile: container (sandbox)
Dec  3 11:57:36 unknown kernel[0] <Debug>: launchd[1507] Container: /private/var/mobile/Applications/776D8BB7-805E-46B1-B208-DF2CFE46AB3A [69] (sandbox)

> > 
Dec  3 11:57:48 unknown MobileMail[1483] <Warning>: Received memory warning.
Dec  3 11:57:49 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.apple.mobilemail[0x26be]) Exited: Killed: 9
Dec  3 11:57:49 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.yourcompany.TestApp[0xc7ed]) Exited: Killed: 9
Dec  3 11:57:49 unknown UserEventAgent[12] <Notice>: jetsam: kernel termination snapshot being created
Dec  3 11:57:49 unknown SpringBoard[1186] <Warning>: Application 'TestApp' exited abnormally with signal 9: Killed: 9
>
Dec  3 11:57:50 unknown SpringBoard[1186] <Warning>: Application 'Mail' exited abnormally with signal 9: Killed: 9
Dec  3 11:57:50 unknown SpringBoard[1186] <Warning>: Received memory warning.
Dec  3 11:57:50 unknown ReportCrash[1509] <Error>: Saved crashreport to /Library/Logs/CrashReporter/LowMemory-2012-12-03-115750.plist using uid: 0 gid: 0, synthetic_euid: 0 egid: 0
Dec  3 11:57:50 unknown kernel[0] <Debug>: launchd[1510] Builtin profile: MobileMail (sandbox)
4

2 に答える 2

3

添付ファイルデータがディスク上のファイルの内容である場合、呼び出し元として実行できる最善の方法は、マップされたファイルからNSDataオブジェクトを作成することです。

NSData * attachmentData = [NSData dataWithContentsOfFile:myPath 
      options:NSDataReadingMappedIfSafe error:&error];

これにより、ファイルの一部にアクセスするまでファイルがディスク上に透過的に保持され、システムを可能な限り効率的にすることができます。

ただし、それを超えると、デバイスのメモリが不足すると、添付ファイルが大きすぎます。また、デバイスが電子メールを添付しようとしてメモリを使い果たした場合、電子メールサービスはおそらく非常に大きい電子メールメッセージを受け入れない可能性があります。

于 2012-12-03T05:33:01.683 に答える
0

メールには制限がありませんが、ISP には制限があります。ほとんどの人にとって現実的な制限はおそらく 10MB ですが、もっと 5MB 前後に保ち、複数のメールに分けたいと思うかもしれません...

以下のコードを使用して NSData のサイズを計算できます

NSData *pdfData=[NSData dataWithContentsOfFile:strpdfpath];

        NSLog(@"PDFData Length is %.02fmb",(float)(int)[pdfData length]/1048576);

その後、正常に添付された後にファイルを削除できます。

[[NSFileManager defaultManager] removeItemAtPath:[strpdfpath stringByDeletingLastPathComponent] error:&err];
于 2012-12-03T06:04:36.000 に答える