0

iOS Sharekit は以前の Xcode で動作しますが、4.2 では動作しなくなります。[キャンセル] ボタンを押すと、このルーチンに移動します

SHK.mの内部

  - (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
        self.currentView = nil;
}

}

コードをステップ実行すると、if (isDissmissingView) にヒットし、戻ります。
だから、私は手動でコードを挿入しました

   [[currentView parentViewController] dismissModalViewControllerAnimated:animated];

ルーチンの先頭に移動しますが、これは何もしません。

参照用に他のコードもいくつか含めます

  - (void)showViewController:(UIViewController *)vc

{

  if (rootViewController == nil)
{
    // Try to find the root view controller programmically

    // Find the top window (that is not an alert view or other window)
    UIWindow *topWindow = [[UIApplication sharedApplication] keyWindow];
    if (topWindow.windowLevel != UIWindowLevelNormal)
    {
        NSArray *windows = [[UIApplication sharedApplication] windows];
        for(topWindow in windows)
        {
            if (topWindow.windowLevel == UIWindowLevelNormal)
                break;
        }
    }

    UIView *rootView = [[topWindow subviews] objectAtIndex:0];  
    id nextResponder = [rootView nextResponder];

    if ([nextResponder isKindOfClass:[UIViewController class]])
        self.rootViewController = nextResponder;

    else
        NSAssert(NO, @"ShareKit: Could not find a root view controller.  You can assign one manually by calling [[SHK currentHelper] setRootViewController:YOURROOTVIEWCONTROLLER].");
}

// Find the top most view controller being displayed (so we can add the modal view to it and not one that is hidden)
UIViewController *topViewController = [self getTopViewController];  
if (topViewController == nil)
    NSAssert(NO, @"ShareKit: There is no view controller to display from");


// If a view is already being shown, hide it, and then try again
if (currentView != nil)
{
    self.pendingView = vc;
    [[currentView parentViewController] dismissModalViewControllerAnimated:YES];
    return;
}

// Wrap the view in a nav controller if not already
if (![vc respondsToSelector:@selector(pushViewController:animated:)])
{
    UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:vc] autorelease];

    if ([nav respondsToSelector:@selector(modalPresentationStyle)])
        nav.modalPresentationStyle = [SHK modalPresentationStyle];

    if ([nav respondsToSelector:@selector(modalTransitionStyle)])
        nav.modalTransitionStyle = [SHK modalTransitionStyle];

    nav.navigationBar.barStyle = nav.toolbar.barStyle = [SHK barStyle];

    [topViewController presentModalViewController:nav animated:YES];            
    self.currentView = nav;
}

// Show the nav controller
else
{       
    if ([vc respondsToSelector:@selector(modalPresentationStyle)])
        vc.modalPresentationStyle = [SHK modalPresentationStyle];

    if ([vc respondsToSelector:@selector(modalTransitionStyle)])
        vc.modalTransitionStyle = [SHK modalTransitionStyle];

    [topViewController presentModalViewController:vc animated:YES];
    [(UINavigationController *)vc navigationBar].barStyle = 
    [(UINavigationController *)vc toolbar].barStyle = [SHK barStyle];
    self.currentView = vc;
}

self.pendingView = nil;     

}

  • (void)hideCurrentViewController { [self hideCurrentViewControllerAnimated:YES]; }
4

1 に答える 1

1

これは既知のエラーで、ios5 で発生しました。これはずっと前にShareKit 2.0で修正されました。アップグレードすることにした場合は、元の sharekit と比べて多くの点が変更されているため、新しいインストール wikiを非常に注意深く文字通りフォローしてください。

于 2012-07-10T13:41:40.827 に答える