Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于Twitter的SLComposeViewController现在在iOS 8.3中崩溃_Ios_Objective C_Slcomposeviewcontroller_Invalidargumentexception - Fatal编程技术网

用于Twitter的SLComposeViewController现在在iOS 8.3中崩溃

用于Twitter的SLComposeViewController现在在iOS 8.3中崩溃,ios,objective-c,slcomposeviewcontroller,invalidargumentexception,Ios,Objective C,Slcomposeviewcontroller,Invalidargumentexception,我的应用程序中有一个Tweetsheet股票期权。刚刚更新到iOS8.3,现在当我尝试显示推文页时,SLComposeViewController抛出一个错误: “由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:'应用程序试图呈现 “目标上无模式视图控制器” 我正在事先检查Twitter是否可用。现在还有其他人有此问题吗?在使用其中一项服务之前,您应该始终检查对象是否可以访问: if( [SLComposeViewController isAvail

我的应用程序中有一个
Tweetsheet
股票期权。刚刚更新到iOS8.3,现在当我尝试显示
推文页时,
SLComposeViewController
抛出一个错误:

“由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:'应用程序试图呈现 “目标上无模式视图控制器”


我正在事先检查Twitter是否可用。现在还有其他人有此问题吗?

在使用其中一项服务之前,您应该始终检查对象是否可以访问:

if( [SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter] ){
这真的很重要,所以

  • 你的应用程序没有崩溃并且
  • 您可以告诉用户该服务不可用
  • 对于可从
    iOS
    使用的其他服务,如
    SMS
    Mail
    ,您也应该这样做:

    if(![MFMessageComposeViewController canSendText]) {
    

    if( ![MFMailComposeViewController canSendMail] ){
    
    如果您想确定手机上有特定的应用程序,您也可以尝试使用
    canOpenURL:

    - (BOOL)isAppAvailable:(NSString *)appURL{
       return [[UIApplication sharedApplication]  
                    canOpenURL:[NSURL URLWithString:appURL]];
    }
    

    我认为调用
    可用于服务类型:SLServiceTypeTwitter
    正在执行类似的操作。

    在运行iOS 8.3的iPhone上使用
    SLServiceTypeTwitter
    时,我也遇到了同样的问题:虽然

    [SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter] 
    
    返回
    YES
    ,随后调用

    [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]
    
    返回
    nil
    。但是,如果我在iPad或iPhone模拟器上运行应用程序,或者如果我将服务类型更改为
    SLServiceTypeFacebook
    ,它将返回视图控制器

    现在我正在使用这个解决方法:为了检查Twitter的可用性,我使用

    +(BOOL)twitterAvailable {
        return([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter] &&
               [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter] != nil);
    }
    
    在演示SLComposeViewController之前,我进一步添加了一个附加检查:

    if(composeViewController != nil) {
       [viewController presentViewController:composeViewController animated:YES completion:nil];
    }
    

    这应该是iOS 8.4中bug修复的未来证据。

    嘿-是的,我检查过了。它还在崩溃。我觉得这是一个错误,因为使用SLServiceTypeFacebook的方法完全相同,我已经将帐户链接到这两个服务。在我升级到8.3之前,它工作得很好。在调用共享功能之前,您必须包含我发布的检查。在我的例子中,我尝试了我的应用程序,我就是这样实现的,一切都很好。不知道到底是什么问题。如果您想确保没有类似情况发生,请拨打应用程序URL检查手机上是否有特定的应用程序可用。您是否已经解决了问题?这是iOS 8.3的问题。已提交错误报告。@user3587825您得到解决方案了吗?
    if(composeViewController != nil) {
       [viewController presentViewController:composeViewController animated:YES completion:nil];
    }