2012-10-23 24 views
17

我正在使用iOS 6全新方式共享信息:UIActivityViewController。要選擇不同的媒體(Facebook,Twitter或電子郵件)上的共享數據我的視圖控制器實現UIActivityItemSource協議如下:UIActivityItemSource Protocole設置複雜對象

- (IBAction)onShareButton:(UIButton *)sender 
{ 

    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[self] applicationActivities:nil]; 

    activityViewController.excludedActivityTypes = @[UIActivityTypeMessage, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypeMessage, UIActivityTypePostToWeibo, UIActivityTypePrint, UIActivityTypeSaveToCameraRoll]; 
    [self presentViewController:activityViewController animated:YES completion:^{}]; 
} 

#pragma mark - UIActivityItemSource Protocol 

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType { 
    if ([activityType isEqualToString:UIActivityTypePostToFacebook]) { 
     NSArray *items = @[@"message facebook", [NSURL URLWithString:@"http://www.myUrlFacebook.com"]]; 
     return items; 
    } else if ([activityType isEqualToString:UIActivityTypePostToTwitter]) { 
     NSArray *items = @[@"message twitter", [NSURL  URLWithString:@"http://www.myUrlTwitter.com"]]; 
     return items; 
    } else if ([activityType isEqualToString:UIActivityTypeMail]) { 
     NSArray *items = @[@"message mail", [NSURL URLWithString:@"http://www.myUrlMail.com"]]; 
     return items; 
    } 

     NSArray *items = @[@"Not a proper Activity", [NSURL URLWithString:@"http://www.myUrlMail.com"]]; 
    return items; 
} 

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController { 
    return @"PlaceHolder"; 
} 

當我回來了activityViewController:itemForActivityType:一個簡單的NSString字符串很好用我的UIActivityViewController,但我找不到使用Array的方法!

根據蘋果的文檔應該可以:

此方法返回的實際數據對象由活動對象採取行動 Apple documentation

有誰曾經使用過這個UIActivityItemSource議定書數組,還是有一個使用完整的教程來做到這一點?

注:我也得到了控制檯上的錯誤,它可以幫助...

發射服務:註冊未知的應用程序標識符com.apple.mobilemail失敗

發射服務:無法找到應用程序標識符com.apple.mobilemail

+2

你是否發現了關於com.apple.mobilemail的消息在控制檯中? –

+1

控制檯錯誤只出現在模擬器中,其中郵件應用程序根本不存在。它可以被忽略。 – Emil

+0

@Tommecpe:你是怎麼修復它的? – BaSha

回答

16

花了大量的時間試圖找出這個問題後,似乎無法通過它的項目NSArray。所以我擴大UIActivityViewController使它成爲可能。

RDActivityViewController

+0

非常感謝。我會盡快測試它。 –

+0

有人可以詳細說明上述情況嗎?什麼方法不允許NSArray?我遇到同樣的問題,無法理解答案。 TNX。 – jbbenni

+1

這太棒了!謝謝!在這個問題上,我一直在牆上撞牆。 RDActivityViewController工作得很好。 – Dylan

20

符合UIactivityItemSource單個對象只能返回一個單條數據爲activityViewControllerPlaceholderItem:,沒有NSArray秒。

您可以通過在initWithActivityItems:activityItems部分創建並傳遞兩個UIActivityItemSource來解決此問題。每個來源都可以傳遞一個佔位符值,但可以在itemForActivityType上返回空白,這樣您根本不必使用該特定類型的數據。

或者只是使用其他答案中提到的那個很酷的擴展。