应用程序在 iOS 8 中运行良好,但在 iOS 7 中却不行

Posted

技术标签:

【中文标题】应用程序在 iOS 8 中运行良好,但在 iOS 7 中却不行【英文标题】:App runs fine in iOS 8, but not in iOS 7 【发布时间】:2015-01-21 21:22:26 【问题描述】:

所以,在我的应用中,我想使用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、硬件或模拟器上运行良好。

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

【问题讨论】:

您是否遇到任何错误? 是的,它说:'-[UIActivityViewController setCompletionWithItemsHandler:]: unrecognized selector sent to instance 0x7beb0730' 该属性在 iOS 7 上不可用 我猜你的意思是iOS7 有问题的属性是completionWithItemsHandler - 从iOS8开始就存在。 iOS7 使用completionHandler。参考:developer.apple.com/library/prerelease/ios/documentation/UIKit/… 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

好的,这就是我所做的。最有可能的是,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 中运行良好。

【讨论】:

以上是关于应用程序在 iOS 8 中运行良好,但在 iOS 7 中却不行的主要内容,如果未能解决你的问题,请参考以下文章

在 ios 8 中的 UITextview 中单击时,键盘不会弹出但在 ios 7 中运行良好

UIView animatewithduration 在 iOS 7 上跳过动画,但在 iOS 8 上运行良好

我的应用在 iPad 模拟器上运行良好,但在 iPad(iOS 8.4)上崩溃,xcode 说无法在捆绑中加载 NIB

iOS 8:UITableView 在 heightForRowAtIndexPath 上崩溃(在 iOS7 上运行良好)

async Task.Run lambda 表达式在 Android 上使 Unity AR 应用程序崩溃,但在 iOS 上运行良好

ffmpeg.js 在 iOS cordova 中运行速度极慢(但在 iOS safari 中运行良好?)