0

我们的iPad 应用程序使用UINavigationController. The second view managed by the navigation controller is a subclass of , which when the correct row is chosen, pushes a , as described on http://code.google.com/p/gdata-objectivec-client/wiki/OAuthSignInControllers :UIPopoverController
UITableViewControllerGDataOAuthViewControllerTouch

GDataOAuthViewControllerTouch *googleOAuthViewController =
[[GDataOAuthViewControllerTouch alloc] initWithScope:@"http://www.google.com/reader/api/*"
                                            language:nil
                                      appServiceName:kAppServiceName
                                            delegate:self
                                    finishedSelector:@selector(viewController:finishedWithAuth:error:)];

googleOAuthViewController.contentSizeForViewInPopover = CGSizeMake(400.0, 577.0);
googleOAuthViewController.navigationItem.title = @"Google Account";

[self.navigationController pushViewController:googleOAuthViewController animated:YES];
[googleOAuthViewController release];

成功调用完成的方法:

- (void)viewController:(GDataOAuthViewControllerTouch *)viewController
      finishedWithAuth:(GDataOAuthAuthentication *)auth
                 error:(NSError *)error {
    // error == nil
}

然而,当应用程序尝试检索订阅列表时,请求会以某种方式被取消:

Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn\u2019t be completed.

代码 -1012 是 kCFURLErrorUserCancelledAuthentication = -1012(在 CFNetworkErrors.h 中定义)。

googleOAuthViewController被呈现为模态控制器时:

[self presentModalViewController:googleOAuthViewController animated:YES];

然后可以毫无问题地检索请求的数据。

目前尚不清楚是什么原因导致当控制器被推送到导航控制器时请求被取消以及如何解决这个问题。

4

1 回答 1

0

我们的应用程序从 Google Reader 同步请求用户的订阅列表。

提到的问题发生在googleOAuthViewControllera 的堆栈上UINavigationController并且不是根控制器时。完成后,Google 的代码会在popView方法中弹出控制器GDataOAuthViewControllerTouch.m(gdata-objectivec-client-1.11.0 中的第 361-375 行)。不知何故,调用popViewControllerAnimated干扰了请求,在回调中执行(在成功验证时):

- (void)viewController:(GDataOAuthViewControllerTouch *)viewController
      finishedWithAuth:(GDataOAuthAuthentication *)auth
                 error:(NSError *)error

GDataOAuthViewControllerTouch.m如果注释掉第 367 到 370行:

//      isPoppingSelf_ = YES;

//      [[self navigationController] popViewControllerAnimated:YES];
//      [[self view] setHidden:YES];

那么请求总是成功的。请求完成后,必须在应用程序中弹出 Google 的视图。

于 2011-02-23T12:06:10.070 回答