0

私たちのiPadアプリはでを使用しUINavigationControllerていUIPopoverControllerます。
ナビゲーションコントローラーによって管理される2番目のビューは、のサブクラスであり 、 http: //code.google.com/p/gdata-objectivec-client/wiki/OAuthSignInControllersで説明されているように UITableViewController、正しい行が選択されると、をプッシュ します。GDataOAuthViewControllerTouch

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リーダーにユーザーのサブスクリプションリストを同期的にリクエストします。

上記の問題googleOAuthViewControllerは、がのスタック上にありUINavigationController、ルートコントローラではない場合に発生します。Googleのコードは、完了すると、popViewメソッドのコントローラーをポップしますGDataOAuthViewControllerTouch.m(gdata-objectivec-client-1.11.0の行361-375)。どういうわけか、の呼び出しはpopViewControllerAnimated、コールバックで実行された要求に干渉します(認証が成功した場合)。

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

行367から370GDataOAuthViewControllerTouch.mがコメントアウトされている場合:

//      isPoppingSelf_ = YES;

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

その後、リクエストは常に成功します。リクエストが完了した後、Googleのビューをアプリに表示する必要があります。

于 2011-02-23T12:06:10.070 に答える