手順
- MessageUI.frameworkを追加
- 書き出すデータをカンマと改行区切りのNSStringに整形
- MFMailComposeViewControllerにデータをセット、表示
コード
例として、ObjというNSManagedObjectクラスのid, ユーザ名, 日付, コメントを取得したいとします。
// メールを利用できるかチェック
if (![MFMailComposeViewController canSendMail]) {
return;
}
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
[controller setMailComposeDelegate:self];
// 取得したNSStringをNSdataに変換
NSData* data = [[Obj exportCSVString:objects] dataUsingEncoding:NSUTF8StringEncoding];
// mimeTypeはtext/csv
[controller addAttachmentData:data mimeType:@"text/csv" fileName:@"export.csv"];
// 表示
[self.navigationController presentViewController:controller animated:YES completion:nil];
- (NSString*)exportCSVString:(NSArray*)sources
{
NSDateFormatter* f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"yyyy-MM-dd"];
// 1行目だけ先に追加
NSMutableArray* all = [@[@"id,user_name,date,comment"] mutableCopy];
// データを降順にソート
NSSortDescriptor* desc = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
sources = [sources sortedArrayUsingDescriptors:@[desc]];
// カンマ区切りで追加
for (NSInteger i=0; i<sources.count; i++) {
Obj* obj = [sources objectAtIndex:i];
NSArray* adding = @[[obj.identifier stringValue], obj.user.name, [f stringFromDate:obj.date], obj.comment];
NSString* str = [adding componentsJoinedByString:@","];
[all addObject:str];
}
// CRLFで区切ったNSStringを返す
return [all componentsJoinedByString:@"\r\n"];
}