1

在我的应用程序中,我SLComposeViewController用来发送推文。我也addURL:这样调用它的方法:

[tweetSheet addURL:[NSURL URLWithString:@"http://itunes.com/apps/MyAppName"]];

它在 iOS 6 中运行良好,但在 iOS 7 中,它会在屏幕上显示后立即打开 iTunesStore。我如何解决它?

更新:

 if ([SLComposeViewController isAvailableForServiceType:network])
{
    AppController *appController = (AppController *)[[UIApplication sharedApplication] delegate];
    MyNavigationController *navController = appController.navController;

    UIViewController *currentController = [[navController viewControllers] lastObject];

    SLComposeViewController *tweetSheet = [SLComposeViewController composeViewControllerForServiceType:network];
    [tweetSheet setInitialText:text];
    [tweetSheet addImage:[UIImage imageNamed:temp_character]];
    [tweetSheet addURL:[NSURL URLWithString:@"http://itunes.com/apps/MyAppName"]];

    tweetSheet.completionHandler = ^(SLComposeViewControllerResult result){

        [currentController dismissViewControllerAnimated:YES completion:nil];

        if (result == SLComposeViewControllerResultDone)
          [[NSNotificationCenter defaultCenter] postNotificationName:HC_TWEET_SENT_NOTIFICATION object:nil];

    };

    [currentController presentViewController:tweetSheet animated:YES completion:nil];
}
4

1 回答 1

0

您的自定义 socialIntegration 类中有一个错误。如果 Facebook 在设备上可用,它只会返回 SLComposeViewController。如果不是,则不返回任何内容。

但是,当您实际调用它时,您不会对此进行测试:

SLComposeViewController * faceSheet=[self.socialIntegration showFacebook:@"text" andImage:nil andLink:@"link" andView:self];
        dispatch_sync(dispatch_get_main_queue(), ^{
            //[self netConnectionTrue:cell Connected:answer];
            //[tempAlertView show];
            [self presentViewController:faceSheet animated:YES completion:NO];

        });

...您没有检查 faceSheet 是否为零。因此,如果没有 Facebook 帐户,您可以使用 nil 对象调用 presentViewController,这会触发您看到的错误。

您在 iOS 7 上看到此问题的原因是您链接的 FB 帐户可能已重置,但这也可能是您在 iOS 6 上的用户崩溃的原因。

于 2013-10-17T15:00:35.270 回答