【问题标题】:ShareKit modal view controller won't go awayShareKit 模态视图控制器不会消失
【发布时间】:2011-10-30 02:42:44
【问题描述】:

我在 Xcode 4.2 (iOS SDK 5) 上使用 ShareKit 0.2.1 在 Twitter 上共享文本。它共享良好,但模式视图控制器在单击取消按钮后成功共享后不会消失(见下文):

这是我的代码:

-(IBAction)shareOnTwitter:(id)sender{


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

    [SHKTwitter shareText:text];

}

我做错了什么?

【问题讨论】:

    标签: objective-c cocoa-touch uiviewcontroller modalviewcontroller sharekit


    【解决方案1】:

    我和你有同样的问题。这是 iOS 5 的问题。这是因为 ShareKit 在 UIViewController 上使用了一个名为 parentViewController 的方法,根据 Apple 文档,您不能再在 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 上。

    【讨论】:

    • 这也是我实现的解决方案
    • y 它正在改变设备的方向
    【解决方案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];
    }
    

    【讨论】:

      【解决方案3】:

      这是我在我的一个应用程序中使用的代码。 它可以很好地解雇。

      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...
      【解决方案4】:

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

      NSString *text = @"Go away, modal view controller!";
      
      [SHKTwitter shareText:text];
      

      我可以确认它可以很好地解雇。 在尝试使 Sharekit ARC 兼容时,您可能更改了 SHKTwitterForm.m 中的一些代码。这导致了你的错误

      【讨论】:

      • 不,我刚刚编译了所有没有 ARC 的 ShareKit 文件:-fno-objc-arc
      • 我刚刚重读了你原来的问题,发现有些困惑,你是如何使用 Xcode 4.3 的?另外,您遇到的错误是什么模拟器版本?你也在真机上测试过吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 2016-06-25
      • 2011-09-27
      相关资源
      最近更新 更多