2011-10-18 7 views
1

私はObjective Zipライブラリを使用して、私はイメージを圧縮しているところ(私が推測するところ)に来た。ZipファイルをNSDataに変換して、Zipファイルを添付ファイルとして電子メールで送信するにはどうすればいいですか?

今、このzippedファイルをメールコンポーザーで送信します。しかし、私は自分のメール機能内で "NSDataオブジェクト"を宣言する必要があります。

[picker addAttachmentData:"NSData object" mimeType:@"application/zip" fileName:@"test.zip"]; 

は、ここに私のコードのsnippitだ

-(IBAction)sendMail{ 
    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"test.zip"]; 
    NSArray *data = [[NSArray alloc] initWithObjects:@"first",@"second",@"third",nil]; 

    NSString *docDir3 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *pngFilePath4 = [NSString stringWithFormat:@"%@/foto2.jpg",paths]; 
    [data writeToFile:pngFilePath4 atomically:YES]; 

    NSData * fotoData = [[NSData alloc] initWithContentsOfFile:pngFilePath4]; 

    NSFileManager *manager = [[NSFileManager alloc] init]; 
    [manager removeItemAtPath:pngFilePath4 error:nil]; 

    ZipFile *readFile = [[ZipFile alloc] initWithFileName:path mode:ZipFileModeCreate]; 

    ZipWriteStream *stream = [readFile writeFileInZipWithName:@"foto2.jpg" compressionLevel:ZipCompressionLevelNone]; 

    [stream writeData:fotoData]; 
    [stream finishedWriting]; 

    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
    picker.mailComposeDelegate=self; 

    [picker addAttachmentData:"NSData Object" mimeType:@"application/zip" fileName:@"test.zip"]; 

    Class mailclass = (NSClassFromString(@"MFMailComposeViewController")); 
    if([mailclass canSendMail]){ 
     [self presentModalViewController:picker animated:YES]; 
    } 

    [readFile close]; 
    [data2 release]; 
    [fotoData release]; 
} 

私はreadFileのオブジェクトから別のNSDataオブジェクトを作成し、[ピッカーattachmentData:メソッド]内にこれを配置する必要があると思います。誰かが正しい方向に私を指すことができることを願っています。

EDIT

はまだこれが正常に動作させることはできません。 zipファイルを送信するのは本当に時間がかかります(Wi-Fi経由でも)。 zipイメージを開くと、ファイルを開くことができないというエラーが表示されます。ここに私のコードです:

NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"test.zip"]; 
    NSArray *data = [[NSArray alloc] initWithObjects:@"first",@"second", nil]; 

    NSString *docDir3 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *pngFilePath3 = [NSString stringWithFormat:@"%@/foto2.jpeg",docDir3]; 
    NSData * imageData2 = [[[NSData alloc] initWithContentsOfFile:pngFilePath3] autorelease]; 

    [data writeToFile:pngFilePath3 atomically:YES]; 

    ZipFile *readFile = [[ZipFile alloc] initWithFileName:path mode:ZipFileModeCreate]; 

    ZipWriteStream *stream = [readFile writeFileInZipWithName:@"foto2.jpeg" compressionLevel:ZipCompressionLevelNone]; 

    [stream writeData:imageData2]; 
    [stream finishedWriting]; 


    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
    picker.mailComposeDelegate=self; 
    [picker addAttachmentData:[NSData dataWithContentsOfFile:path] mimeType:@"application/zip" fileName:@"test.zip"]; 

    Class mailclass = (NSClassFromString(@"MFMailComposeViewController")); 
    if([mailclass canSendMail]){ 
     [self presentModalViewController:picker animated:YES]; 
    } 

    [data release]; 
    [readFile close]; 

私を助けるために事前に感謝!

答えて

2

pathに書き込み、ファイルパスからデータを取得するには[NSData dataWithContentsOfFile:path]を使用します。書き込みエラーが発生したので、あなたが書き込み操作の周りのtry/catchを追加し、データがnilでないことを確認してくださいとき

[picker addAttachmentData:[NSData dataWithContentsOfFile:path] 
       mimeType:@"application/zip" 
       fileName:@"test.zip"]; 

のObjective-Zipは、例外をスローしません。

+0

ありがとう、しかし、私はまだそれを動作させることができません。私は上記の私の答えを編集します。 – BarryK88

関連する問題