ShareKit模态视图控制器无法消失

15

我正在使用ShareKit 0.2.1在Xcode 4.2(iOS SDK 5)上分享Twitter上的文字。分享正常,但是模态视图控制器在成功分享后或点击取消按钮后不会消失(如下所示):

输入图片说明

这是我的代码:

-(IBAction)shareOnTwitter:(id)sender{


    // Item to share
    NSString *text = @"Go away, modal view controller!";

    [SHKTwitter shareText:text];

}

我做错了什么?

4个回答

30

这是一个iOS 5的问题。原因是ShareKit在使用UIViewController的一个名为parentViewController的方法,而根据苹果文档,在iOS 5中不能再使用该方法。相反,您必须使用presentingViewController。

所以要在ShareKit代码中修复它,请进入SHK.m,找到带有签名(void)hideCurrentViewControllerAnimated:(BOOL)animated的方法,并将其替换为:

- (void)hideCurrentViewControllerAnimated:(BOOL)animated
{
    if (isDismissingView)
        return;

    if (currentView != nil)
    {
        // Dismiss the modal view
        if ([currentView parentViewController] != nil)
        {
            self.isDismissingView = YES;
            [[currentView parentViewController] dismissModalViewControllerAnimated:animated];
        } else if ([currentView presentingViewController] != nil) {
            self.isDismissingView = YES;
            [[currentView presentingViewController] dismissModalViewControllerAnimated:animated];
    } else
        self.currentView = nil;
    }
}

这对我在 iOS 5 上起作用。


这是我实现的解决方案。 - Mark Struzinski
它正在改变设备的方向。 - WaaleedKhan

2
if (isDismissingView)
    return;

if (currentView != nil)
{
    // Dismiss the modal view
    if ([currentView parentViewController] != nil)
    {
        self.isDismissingView = YES;
        [[currentView parentViewController] dismissModalViewControllerAnimated:animated];
    }

    else {
        //## ADD BELOW ##
        self.isDismissingView = YES;
        [currentView dismissModalViewControllerAnimated:animated];
        self.currentView = nil;

    }
}
else {
    [[self getTopViewController].navigationController popViewControllerAnimated:YES];
}

1

这是我在其中一个应用程序中使用的代码。 它可以正常关闭。

NSURL *url = [NSURL URLWithString:@"http://itunes.apple.com/us/app/packager/id459511278?l=nl&ls=1&mt=8"];
NSString *twittertext = [[NSString alloc] initWithFormat: @"Tweet Text"];
SHKItem *item = [SHKItem URL:url twittertext];

// Share the item
[SHKTwitter shareItem:item];
[twittertext release]; 

如果你执行 [NSString stringWithFormat:@"Tweet Text"]; 并删除 [twittertext release]; 这一行,它是否仍然会被解除? 显然唯一的区别是我正在使用 ARC... - cfischer

1

我在我的应用程序中使用了以下代码(禁用ARC)

NSString *text = @"Go away, modal view controller!";

[SHKTwitter shareText:text];

我可以确认它可以正常关闭。 您可能在尝试使Sharekit兼容ARC时更改了SHKTwitterForm.m中的某些代码。这导致了您的错误。


不,我只是编译了所有的ShareKit文件而没有使用ARC:-fno-objc-arc。 - cfischer
我刚刚重新阅读了你的原始问题,发现有些混淆。你怎么使用Xcode 4.3的?另外,在哪个模拟器版本上遇到了这个错误?你也在真实设备上测试过吗? - Louis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接