Twitter 的 SLComposeViewController 现在在 iOS 8.3 中崩溃了

Posted

技术标签:

【中文标题】Twitter 的 SLComposeViewController 现在在 iOS 8.3 中崩溃了【英文标题】:SLComposeViewController for Twitter now crashing in iOS 8.3 【发布时间】:2015-04-13 19:20:41 【问题描述】:

我的应用中有一个Tweetsheet 分享选项。刚刚更新到 ios8.3,现在SLComposeViewController 在我尝试展示Tweetsheet 时抛出错误:

“由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'应用程序试图呈现一个 目标上的 nil 模态视图控制器"

SLComposeViewController *tweetSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[tweetSheet setInitialText:@"testing!"];
[self presentViewController:tweetSheet animated:YES completion:nil];

我正在事先检查 Twitter 是否可用。现在还有人遇到这个问题吗?

【问题讨论】:

你能解决你的问题吗? 这是 iOS 8.3 的问题。已提交错误报告。 @user3587825 你有解决办法吗? 【参考方案1】:

我在运行 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 中错误修复的未来证明。

【讨论】:

【参考方案2】:

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

if( [SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter] )

这真的很重要,所以

    您的应用没有崩溃并且 您可以告诉用户该服务不可用。

您应该对可以从iOS 使用的其他服务执行相同的操作,例如SMSMail

if(![MFMessageComposeViewController canSendText]) 

if( ![MFMailComposeViewController canSendMail] )

如果您想确定手机上有特定的应用程序,您也可以尝试使用canOpenURL:

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

我认为调用 isAvailableForServiceType:SLServiceTypeTwitter 正在执行类似的操作。

【讨论】:

嘿 - 是的,我确实检查过。它仍然在崩溃。我觉得这是一个错误,因为使用 SLServiceTypeFacebook 的完全相同的方法有效,并且我已将帐户链接到这两个服务。在我升级到 8.3 之前它运行良好 在调用共享函数之前,您必须包含我发布的支票。就我而言,我尝试了我的应用程序,并以这种方式实现了它,并且一切正常。不知道具体是什么问题。如果您想确保不会发生这种情况,请通过调用 appURL 来检查手机上是否有特定应用程序

以上是关于Twitter 的 SLComposeViewController 现在在 iOS 8.3 中崩溃了的主要内容,如果未能解决你的问题,请参考以下文章

Twitter REST API 与 Twitter Fabric - Twitter 核心

“使用 Twitter 登录”,现在 Twitter 工具包已经消失了

Twitter的推荐系统开源了,Twitter的推荐系统是什么样的呢?Twitter推荐系统的架构说明

如何使用 iOS 上的原生 Twitter 应用打开 Twitter 推文?

通过调用Twitter API抓取Twitter数据

Twitter账户活动情况分析工具 – Simple Twitter Profile Analyzer