Sja*_*ien 5 cocoa-touch objective-c ios 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
}
}];
Run Code Online (Sandbox Code Playgroud)
由于我复制(和修改)了这段代码,我不想声称我完全理解这里发生了什么.
我所知道的,这是我的问题,上面的代码在iOS 8上运行良好,但在iOS 7,硬件或模拟器上运行不正常.
我非常希望有人可以向我解释这里发生了什么.
该completionWithItemsHandler
属性在iOS 7中不可用,因为它是在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
}
}];
}
}
Run Code Online (Sandbox Code Playgroud)
另外,为简洁起见,您可能省略了这一点,但在初始化之后实际呈现视图控制器非常重要:
[self presentViewController:controller animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)