2012-09-28 15 views
8

iOS6'da paylaşmak üzere UIActivityViewController'ı kullanmak için geçiş yapıyorum, ancak e-posta ile paylaşılırken eklenecek e-posta eki nesnelerinin nasıl oluşturulacağını anlayamıyorum.iOS6 UIActivityViewController kullanarak nesne ekleme

iOS5 karşılık gelen kod şudur: Sana UIActivityViewController ile bunu yapamaz söyleyebileceğim

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
[picker addAttachmentData:data mimeType:@"application/XXX" fileName:fileName]; 

cevap

24

UIActivityViewController üzerinde çok sınırlı bir kontrole sahipsiniz, ancak iyi bilinen mime türlerini ekliyorsanız, bir dosya URL'sinde ilişkili dosya uzantısını sağlayarak düzgün çalışmasını sağlayabileceğinizi buldum.

NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
// The file extension is important so that some mime magic happens! 
NSString *filePath = [docsPath stringByAppendingPathComponent:@"vcard.vcf"]; 
NSURL *fileUrl  = [NSURL fileURLWithPath:filePath]; 

[data writeToURL:fileUrl atomically:YES]; // save the file 

// Now pass the file URL in the activity items array 
UIActivityViewController *avc = [[UIActivityViewController alloc] initWithActivityItems: 
    @[@"Here's an attached vCard", fileUrl] applicationActivities:nil]; 
[vc presentModalViewController:avc animated:YES]; 
+0

Bu gerçekten işe yaradı, teşekkürler markiv :) Bir uygulamayı özel dosyalar (ör. .myApp kullanarak dosyalar) oluşturma hakkında başka bir kılavuz ile birleştirdim ve bunun için de fileURL ile çalıştım. – Setomidor

+1

Bu eski soruyu gündeme getirdiğim için üzgünüm, ama [data writeToURL: filePath atomically: YES] '' [veri writeToURL: fileURL atomically: YES] 'olmalıdır? –

+0

@GabrielePetronella Evet veya inanıyorum [data writeToFile: filePath atomically: YES] de işe yarayacaktı. –

0

- Hatta yapmaya yönetemez o ileti gövdesi için mevcut HTML içeriği - Yani SLComposeViewController kullanarak daha iyi olabilir.

+0

O ... ile etkinlik öğeleri içine geçmek dize etiketleyerek html içeriği eklemek mümkündür - Sadece o zaman html olarak yorumlanacaktır. – SMSidat

+0

@SMSidat emin misiniz? tam olarak yaptığım şey tam anlamıyla işlendi (yani HTML olarak yorumlanmadı) –

+0

Oldukça eminim - Yaptım ve işe yarıyor. Bu soru-cevap parçasını gerçekten kaçırmak istemiyorum, bu konuda zaten bir tane varsa, size yardımcı olmaktan memnuniyet duyarız ya da kodunuzun ilgili bölümünün bir kopyasını alarak yeni bir tane yapabilirim. Ne yapabildiğimi göreceğim – SMSidat

2

herkes için onların dosyaları DropBox ve diğer jenerik dosyaya gibi uygulamalara UIActivityViewController kullanarak paylaşılan olmama neden merak: Ekiniz vCard ise Örneğin, dosya URL içinde ".vcf" uzantısını kullanan uygulamaları ele almak, gerçekten istediğiniz şey bir UIDocumentInteractionController.

böyle o şey kullanın:

class ViewController { 
    var openInController:UIDocumentInteractionController! 

    init() { 
     openInController = UIDocumentInteractionController(URL: docURL) 
    } 

    func shareDoc { 
     openInController.presentOptionsMenuFromRect(CGRectZero, inView: self.view, animated: true) 
    } 
}