我使用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];
答案 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设置>一般。选择SinaWeibo
或TencentWeibo
。启用此功能后,您可以通过设置登录新浪和腾讯。
完成上述操作后,您可以使用SLServiceTypeTencentWeibo
上的SLServiceTypeSinaWeibo
,SLComponentController
和SLComposeController
返回非空modalView
。