首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SLComposeViewController对Facebook和Twitter的看法不同?

SLComposeViewController对Facebook和Twitter的看法不同?
EN

Stack Overflow用户
提问于 2012-11-06 17:21:39
回答 3查看 4.2K关注 0票数 18

我有一些社交分享代码,看起来像这样:

代码语言:javascript
复制
SLComposeViewController *composer = [SLComposeViewController composeViewControllerForServiceType:…];
[composer setInitialText:…];
[composer addURL:…];
[composer setCompletionHandler:^(SLComposeViewControllerResult result) {
    [someController dismissViewControllerAnimated:YES completion:^{
        … // 1
    }];
}];
[someController presentModalViewController:composer animated:YES];

问题是,代码在Facebook和Twitter上的行为不同。当用户确认Facebook的compose屏幕时,作曲者显然对自己不屑一顾,因为标记为1的完成处理程序永远不会被调用,即使当我删除dismissViewControllerAnimated:调用时,一切都正常工作。

另一方面,当用户确认Twitter compose screen时,我没有手动忽略它,compose screen会滑出,但应用程序会停留在原处,就像一些控制器仍然在前台一样。当我添加dismissViewControllerAnimated:调用时,问题消失了,并且正确调用了完成处理程序(1)。

你也注意到这个行为了吗?我做错了什么吗?这是当前的iOS 6,sample code on GitHub。我已经向苹果报告了这个问题(雷达#12642889),目前还没有反应。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-26 16:44:13

该问题显然已在iOS 7中修复,在7.0 beta build 11A4449d上进行了测试。

票数 2
EN

Stack Overflow用户

发布于 2012-12-27 07:17:30

我在我的应用程序中做了类似的事情,与您的代码唯一的区别是我将dismissModalViewControllerAnimated:发送到self,而不是发送到视图控制器。

facebook和twitter composer都在悄悄溜走。

这是我的代码:

代码语言:javascript
复制
SLComposeViewController *composer = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[composer setInitialText:text];
[composer setCompletionHandler:^(SLComposeViewControllerResult result) {
    ...
    [self dismissModalViewControllerAnimated:YES];
}];
[self presentModalViewController:composer animated:YES];
票数 2
EN

Stack Overflow用户

发布于 2013-07-02 03:44:33

我已经确认了你的行为问题:

Twitter版本调用您在视图控制器上设置的完成处理程序,并期望您从该处理程序中调用dismissViewController。

但是,Facebook版本在调用完成处理程序之前会先调用dismissViewController本身。如果您自己调用dismissViewController,则不会发生任何事情,并且不会从可能传递给dismissViewController的任何完成块中获得任何回调。

如果你忽略了dismissViewController调用,那么Twitter分享就卡住了,但是Facebook还行。

如果苹果要修复这种行为,那么创建一个解决方案是一个问题,因为你的解决方案会被破坏。主要的问题是同一个社交VC在微博、Twitter和Facebook的分享版本之间的行为是不一样的。

下面是我修复这个问题的方法:

代码语言:javascript
复制
SLComposeViewController *vc = [SLComposeViewController composeViewControllerForServiceType:serviceType];
if(vc==nil)
{
    [self.delegate imageSaveDidSucceed:NO];
}
else
{
    [vc addImage:self.image];
    vc.completionHandler = ^(SLComposeViewControllerResult result) {
        DEBUG_LOG(@"social sharing completed");
        if(self.presentedViewController)
        {
            DEBUG_LOG(@"presented vc is not nil");
            [self dismissViewControllerAnimated:YES completion:^{
                DEBUG_LOG(@"dismissed vc and calling imageSaveDidSucceed");
                [self.delegate imageSaveDidSucceed:YES];
            }];
        }
        else
        {
            DEBUG_LOG(@"presented vc is nil");
            [self.delegate imageSaveDidSucceed:YES];
        }
    };
    [self presentViewController:vc animated:YES completion: ^{DEBUG_LOG(@"vc was presented");}];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13247960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档