如果是iOS 6,那就执行这个操作,否则如果是iOS 5,执行那个操作?- UIActivityViewController

5

我有一个UIActivityViewController,可以在Facebook/Twitter/Email上分享文本和图像,但仅适用于iOS 6+。是否可能获取设备上运行的iOS版本并进行IF语句以避免在iOS 5中崩溃?如果是iOS 6,则执行以下代码,否则执行其他操作...

-(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];
}

通常情况下(不是特定情况),我发现最好使用respondsToSelector来确定我正在处理的iOS类的哪个版本,基于它支持的方法。除其他外,这有助于记录特定的依赖关系。 - Hot Licks
3个回答

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") ) {

}

阅读这个


2
这是比显式地测试iOS版本号更好的解决方案。 - vcsjones
这个完全有效,谢谢!但是当它不在iOS6上运行时,我该如何隐藏我的NavigationBar中的UIBarButtonItem?在iOS5中,它是可点击的但没有功能,因此我想要隐藏它。谢谢您的回答! - emotality

4

有几种方法可以做到这一点,但最简单的方法可能是测试该类是否存在,例如:

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

0

4
这不是一个好主意。检查所需类是否存在要比依赖于版本号更加干净和直接。 - rmaddy
测试系统版本有一个优点:它清楚地记录了何时可以删除测试(即放弃对iOS 5的支持)。 - nschum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接