如果SLServiceTypeFacebook在不支持facebook的国家/地区使用,SLComposeViewController会导致崩溃吗?

时间:2014-06-12 16:34:44

标签: ios objective-c social-framework slcomposeviewcontroller

我使用SLComposeViewController在系统级别向facebook提示提供一个非常简单的分享。我希望设备在没有登录的情况下通过设置处理登录,所以我不用检查+isAvailableForServiceType并继续呈现SLComposeViewController。

我注意到如果我尝试使用我的设备上没有的服务类型(例如SLServiceTypeTencentWeibo),则会导致我的程序崩溃。这种情况是否同样发生在Facebook不在设备上的国家,类似于我的设备上没有腾讯微博的方式?

我得到的崩溃......

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target

我正在展示SLComposeViewController,所以......

SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTencentWeibo];
[controller addURL:[NSURL URLWithString:@"http://www.example.com"]];
[controller addImage:sharedImage];
NSString *postString = [NSString stringWithFormat:@"A cool sharing string!"];
[controller setInitialText:postString];
[self presentViewController:controller animated:YES completion:nil];

2 个答案:

答案 0 :(得分:4)

我认为它会。解决此问题的最佳方法是避免检查isAvailableForServiceType:,而是检查实例化的控制器是否为nil。通过这种方式,您仍然可以选择在大多数情况下转到“设置”以创建帐户,并且在无法完成时不会随机崩溃。

以下是新浪微博的代码(警报视图中的文字等于Apple正常显示的文字,只是没有选择转到设置):

SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo];
[controller setInitialText:@"Some random text"];
[controller addImage:_randomImage];

if (!controller) {
    [[[UIAlertView alloc] initWithTitle:@"No Sina Weibo Accounts" message:@"There are no Shina Weibo accounts configured. You can add or create a Sina Weibo account in Settings." delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nil] show];
    return;
}

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

答案 1 :(得分:-3)

首先,请确保您启用了中文键盘,转到iOS设置>一般。选择SinaWeiboTencentWeibo。启用此功能后,您可以通过设置登录新浪和腾讯。

完成上述操作后,您可以使用SLServiceTypeTencentWeibo上的SLServiceTypeSinaWeiboSLComponentControllerSLComposeController返回非空modalView