2012-12-05 25 views
5

मुझे UIActivityViewController है जो फेसबुक/ट्विटर/ईमेल पर टेक्स्ट और छवि साझा करता है, लेकिन यह केवल आईओएस 6+ पर काम करता है .. क्या डिवाइस पर चल रहे आईओएस संस्करण को चुनना संभव है और एक आईओएस 5 में दुर्घटनाग्रस्त होने से बचने के लिए वक्तव्य? यदि आईओएस 6, निम्न कोड करें, तो कुछ और करें ...?यदि आईओएस 6 [ऐसा करें] अन्य आईओएस 5 [ऐसा करें]? - UIActivityViewController

-(void)shareMenu 
{ 
    NSString *textToShare = @"Text that will be shared"; 
    UIImage *imageToShare = [UIImage imageNamed:@"share_picture.png"]; 
    NSArray *itemsToShare = [[NSArray alloc] initWithObjects:textToShare, imageToShare, nil]; 
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil]; 
    activityVC.excludedActivityTypes = [[NSArray alloc] initWithObjects: UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeMessage, UIActivityTypePostToWeibo, nil]; 
    [self presentViewController:activityVC animated:YES completion:nil]; 
} 
+0

सामान्य तौर पर (नहीं इस विशेष मामले) मैं इसे 'respondsToSelector' उपयोग करने के लिए एक आईओएस वर्ग मैं, के साथ काम कर रहा हूँ क्या तरीकों का समर्थन करता है के आधार पर का कौन सा संस्करण का निर्धारण करने के आमतौर पर सबसे अच्छा है पाते हैं। अन्य चीजों के अलावा यह विशिष्ट निर्भरता को दस्तावेज करने में मदद करता है। –

उत्तर

25
if([UIActivityViewController class]) { 
    NSString *textToShare = @"Text that will be shared"; 
    UIImage *imageToShare = [UIImage imageNamed:@"share_picture.png"]; 
    NSArray *itemsToShare = [[NSArray alloc] initWithObjects:textToShare, imageToShare, nil]; 
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil]; 
    activityVC.excludedActivityTypes = [[NSArray alloc] initWithObjects: UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeMessage, UIActivityTypePostToWeibo, nil]; 
    [self presentViewController:activityVC animated:YES completion:nil]; 
} 

या बेहतर इस्तेमाल

if(NSClassFromString (@"UIActivityViewController")) { 

} 

पढ़ें this

+2

यह आईओएस संस्करण संख्याओं को स्पष्ट रूप से परीक्षण करने से बेहतर समाधान है। – vcsjones

+0

यह 100% काम करता है धन्यवाद! लेकिन मैं ** ** UIBarButtonItem ** को अपने ** नेविगेशनबार ** में कैसे छुपा सकता हूं जब यह आईओएस 6 पर नहीं चल रहा है? आईओएस 5 में यह क्लिक करने योग्य है लेकिन कोई फंक्शन नहीं है, इसलिए मैं इसे छिपाना चाहता हूं? आपके उत्तर के लिए धन्यवाद! – emotality

+0

http://stackoverflow.com/questions/10021748/how-do-i-show-hide-a-uibarbuttonitem – Max

0

आप [[UIDevice currentDevice] systemVersion] कि मौजूदा ऑपरेटिंग सिस्टम के लिए एक स्ट्रिंग वापस आ जाएगी उपयोग करने पर विचार करना चाहिए। यह देखने के लिए कि क्या संस्करण कम से कम एक निर्दिष्ट संख्या है, आप आसानी से एक मैक्रो लिख सकते हैं।

+4

यह एक अच्छा विचार नहीं है। वांछित वर्ग के अस्तित्व की जांच करना बेहतर है। यह संस्करण संख्याओं पर निर्भर होने से बहुत साफ और प्रत्यक्ष है। – rmaddy

+0

आपके उत्तर के लिए धन्यवाद! :) – emotality

+0

सिस्टम संस्करण के परीक्षण के लिए एक फायदा है: यह वास्तव में परीक्षण को हटा देता है जब आप वास्तव में परीक्षण को फिर से हटा सकते हैं (यानी आईओएस 5 समर्थन छोड़ते समय)। – nschum

4

ऐसा करने के कई तरीके हैं, लेकिन सबसे सरल शायद इस वर्ग, उदा के अस्तित्व के लिए परीक्षण करने के लिए है

if ([UIActivityViewController class]) 
    //iOS 6+ 
else 
    // < iOS 6 
+0

आपके उत्तर के लिए धन्यवाद! :) – emotality