UIActivityViewController,活动未完成,共享选项未加载

时间:2014-01-28 00:08:56

标签: ios iphone sharing uiactivityviewcontroller uiactivity

我有一个拥有分享按钮的应用。此共享按钮加载UIActivityViewController以共享到Facebook,Twitter,电子邮件,短信等

它曾经工作正常,我认为它在模拟器上仍能正常工作,但在设备上,视图控制器显示所有正确的选项,如果你点击一个,没有任何反应,或者如果它是Mail,邮件模态视图加载然后解散自己。然后我得到我的日志“活动未执行。”,这是完成块返回false以完成但activityType不为null。所以它正在识别选择,但由于某种原因它没有将活动加载到视图中

我已经检查了我想要分享的内容,甚至用虚拟内容替换它(如下所示),仍然没有运气。我正在使用普通设备,我设置了Twitter,Mail和Facebook帐户,发短信也是如此。唯一有效的是复制(即将共享内容复制到剪贴板时)。在同一设备上的其他应用程序中,UIActivityViewController和所选活动的加载工作正常。在运行该应用程序的其他设备上也观察到相同的问题。

真的不明白这里的问题是什么。非常困惑!任何有关尝试的帮助或建议都将非常感激。我没有看到任何方法来调试此问题。

这是代码:(注意我也尝试删除图像,没有运气)

- (void)shareTapped {

    NSString *shareText = @"Testing";//[self shareText];

    NSURL *url = [NSURL URLWithString:@"http://www.google.ca"]; //[self shareURL];
    NSArray *activityItems = [NSArray arrayWithObjects:shareText,url, self.shareImage, nil];

    UIActivityViewController *shareDrawer = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
shareDrawer.excludedActivityTypes = @[UIActivityTypePostToWeibo,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll,UIActivityTypePrint];

    shareDrawer.completionHandler = ^(NSString *activityType, BOOL completed) {
        if (completed) {
            NSLog(@"Selected activity was performed.");
        } else {
            if (activityType == NULL) {
                NSLog(@"User dismissed the view controller without making a selection.");
            } else {
                NSLog(@"Activity was not performed.");
            }
        }

        NSString *result = completed ? @"success" : @"fail";
        if (activityType == NULL) {
            result = @"dismissed";
        }
    };
    [self presentViewController:shareDrawer animated:YES completion:nil];
}

2 个答案:

答案 0 :(得分:1)

好的,通过消除过程我终于缩小了罪魁祸首:

我有一个自定义的UISegmentedControl,其中包含文本的自定义字体,我手动调整了内容偏移量,使其显示正常。虽然我删除了这些行,但分段控件实际上看起来很好。

这是代码(我已经确认导致问题的是所有三行)

    [[UISegmentedControl appearance] setContentPositionAdjustment:UIOffsetMake(4, 0) forSegmentType:UISegmentedControlSegmentLeft barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setContentPositionAdjustment:UIOffsetMake(0, 0) forSegmentType:UISegmentedControlSegmentCenter barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setContentPositionAdjustment:UIOffsetMake(-4, 0) forSegmentType:UISegmentedControlSegmentRight barMetrics:UIBarMetricsDefault];

现在,看到在选择共享选项后弹出的视图中没有分段控件,我不知道为什么会导致这个问题。但是现在我删除它肯定有效。

感谢那些试图提供帮助的人。当然,你不可能猜到这就是问题所在。任何人都会遇到这个问题的可能性非常低,因为调整内容位置可能相当罕见。

要调试此问题,我按照以下步骤操作:

  1. 我测试了问题是否与我正在设置的UIActivityViewController上的属性或我正在共享的活动项有关。它没有。
  2. 我测试了UIActivityViewController在从我的应用程序内部的其他视图控制器调用时是否正常工作。它没有。
  3. 我制作了一个空白视图控制器,其中有一个按钮,可以在按下条形按钮时显示通用的UIActivityViewController。我提出了我的根本观点。这很有效,因此表明这是一个孤立的问题。
  4. 我没有将该视图控制器作为我的应用程序的根目录,而是将其从正常的主视图中推出。它不再起作用,从而确定问题可能与我的主要观点有关。
  5. 我注释掉了viewDidLoad,viewDidAppear和viewWillAppear中的所有代码,只是在导航栏中添加了一个按钮,用于加载我的共享测试。那很有效。然后我取消注释viweDidAppear和viewWillAppear,仍然有效。所以我取消了viewDidLoad的块,直到我确切地知道问题是什么。
  6. 我学到的东西:对于像这样的奇怪问题(即看起来像是iOS错误或其他东西,但是你找不到任何人发布它),你应该花更多时间调试才能发布堆栈溢出。 (我现在应该知道这一点,但是每个调试的新问题都感觉像是这个规则的例外)

    如果您知道为什么调整UISegmentedControl的内容位置会破坏UIActivityViewController的共享,即使这些视图不包含分段控件,请在下面发表评论

    由于

答案 1 :(得分:0)

也有同样的问题,这就是我为克服它而采取的措施。

我建议将Social.framework添加到您的链接二进制文件并使用

SLComposeViewController *socialShare = [SLComposeViewController composeViewControllerForServiceType:shareType];

shareType可以是SLServiceTypeFacebookSLServiceTypeTwitter

我创建了一个UIAlertview弹出窗口,以显示用户的共享选项

    UIAlertView *social = [[UIAlertView alloc]initWithTitle:@"Share" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Twitter", @"Facebook", @"Email", nil];

并且根据他们选择的那个(使用UIAlertview Delegate方法),然后可以相应地共享内容,它是UIActivityViewController的一个很好的替代品。

希望这个建议有助于,欢呼,吉姆。