2012-10-23 15 views
17

मैं IOS 6 नए तरीके से जानकारी साझा करने का उपयोग कर रहा निर्धारित किया है। मीडिया (फेसबुक, ट्विटर या मेल) के आधार पर साझा किए गए डेटा का चयन करने के लिए मेरे विचार नियंत्रक के रूप में पालन 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 प्रोटोकॉल के साथ उपयोग करता है Arrays, या ऐसा करने के लिए एक पूर्ण ट्यूटोरियल का उपयोग है?

नोट: मैं भी कंसोल पर यह त्रुटि आई है, यह मदद मिल सकती है ...

लॉन्च सेवाएं: अज्ञात एप्लिकेशन पहचानकर्ता com.apple.mobilemail पंजीयन विफल रहा है

लॉन्च सेवाएं: प्राप्त करने में असमर्थ com.apple.mobilemail

+2

आप को पता चला क्या com.apple.mobilemail के बारे में है कि संदेश कंसोल में है है? –

+1

कंसोल त्रुटि केवल सिम्युलेटर में होती है, जहां मेल-ऐप बस मौजूद नहीं है। इसे अनदेखा किया जा सकता है। – Emil

+0

@ टॉमसेपे: आपने इसे कैसे ठीक किया? – BaSha

उत्तर

16

एप्लिकेशन पहचानकर्ता इस एक पता लगाने की कोशिश समय की एक महत्वपूर्ण राशि खर्च करने के बाद, यह यह आइटम के एक NSArray पारित करने के लिए संभव नहीं है लगता है। इसलिए मैंने इसे संभव बनाने के लिए UIActivityViewController बढ़ाया।

RDActivityViewController

+0

आपको बहुत बहुत धन्यवाद। जितनी जल्दी हो सके मैं इसका परीक्षण करूंगा। –

+0

क्या कोई उपर्युक्त पर विस्तृत कर सकता है? एनएसएआरएआरई को किस विधि की अनुमति नहीं है? मुझे एक ही समस्या है और जवाब समझ में नहीं आ रहा है। Tnx। – jbbenni

+1

यह बहुत अच्छा है! धन्यवाद! मैं इस मुद्दे पर कुछ घंटों के लिए दीवार के खिलाफ अपने सिर को टक्कर लगी होगी। RDActivityViewController महान काम करता है। – Dylan

20

UIactivityItemSource के अनुरूप एक भी वस्तु केवल activityViewControllerPlaceholderItem: के लिए डेटा के एक टुकड़े लौट सकते हैं, कोई NSArray रों।

प्रारंभिक initWithActivityItems: के activityItems भाग में आप दो UIActivityItemSource एस बनाकर और पारित करके इसे दूर कर सकते हैं। प्रत्येक स्रोत प्लेसहोल्डर मान पास कर सकता है, लेकिन itemForActivityType पर कुछ खाली कर सकता है ताकि आपको गतिविधि के आधार पर उस विशेष प्रकार के डेटा का उपयोग न करना पड़े।

या बस का उपयोग करने वाले शांत विस्तार अन्य जवाब में बताया गया।

संबंधित मुद्दे