App在iOS 8中运行良好,但在iOS 7中运行不正常

时间:2015-01-21 21:22:27

标签: ios objective-c cocoa-touch uiactivityviewcontroller

因此,在我的应用中,我想使用UIActivityViewController分享内容。

为了确保共享活动成功,我有以下代码:

UIActivityViewController *controller =  [[UIActivityViewController alloc]
                                                     initWithActivityItems:@[text, shortURL, image]
                                                     applicationActivities:nil];
[controller setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
          if (! completed){
            // Here I do some stuff irrelevant to the question
        }
    }];

由于我复制(并修改了)此代码,我不想声称我完全理解这里发生的事情。

做什么知道,这是我的问题,上面的代码在iOS 8上运行良好,但在iOS 7,硬件或模拟器上运行不正确。

我非常希望有人可以向我解释这里发生了什么。

2 个答案:

答案 0 :(得分:9)

iOS 7中没有completionWithItemsHandler属性,因为它是在iOS 8中引入的。

您正在寻找的是现已弃用的completionHandler财产;如果你的部署目标低于iOS 8,你可以使用它,但如果你想要面向未来,你可以检查是否支持新的处理程序,如果没有,则使用旧的处理程序:

if([[UIApplication sharedApplication] respondsToSelector:(@selector(setCompletionWithItemsHandler:))]){
        [controller setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
            if(!completed){
                // Out of scope of question
            }
        }];
    }else{
        [controller setCompletionHandler:^(NSString *activityType, BOOL completed) {
            if(!completed){
                // Out of scope of question
            }
        }];
    }
}

另外,为简洁起见,您可能省略了这一点,但在初始化后实际呈现视图控制器非常重要:

[self presentViewController:controller animated:YES completion:nil];

答案 1 :(得分:1)

好的,这就是我做的。最有可能的是,Kremelur总体上回答了这个问题,但我太过于理解这一点了。所以,经过一些跨谷搜索,我复制并粘贴了一些东西。我希望这对某人有用。

[controller setCompletionHandler:^(NSString *activityType, BOOL completed) {
        NSLog(@"completed dialog - activity: %@ - finished flag: %d", activityType, completed);
        if (! completed){
            // Out of scope of question
        }
    }];

此代码似乎在iOS7和iOS8中都运行良好。