3

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

1 回答 1

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];
于 2014-09-21T21:54:33.023 回答