1

現在、モバイル アプリで Facebook のシングル サインオン機能を試しています。これまでのところ、アプリをテストするときに Facebook Auth Dialog にアクセスできました。しかし、アプリを承認するときに [OK] ボタンをクリックすると、ビューに黒い画面が表示されます。これは の割り当てによるものなのだろうかrootViewController

ここに画像の説明を入力

私のこのコード行でFbSSOTrialDelegate.m

self.window.rootViewController = self.FbSSOTrialVC;

という警告が表示Incompatible pointer types assigning to 'UIViewController *' from 'FbSSOTrialViewController *'され、コンソールにも次のログが表示されます。

2012-07-09 11:17:04.798 FbSSOTrial[976:f803] Application windows are expected to have a root view controller at the end of application launch

FbSSOTrialVCそれがのサブクラスであると確信しているので、私はそれがかなり奇妙だと言いますUIViewController

なぜこれが起こっているのか教えてください。以下は、FbSSOTrialViewController.h の他のコードです。

#import <UIKit/UIKit.h>

@interface FbSSOTrialViewController : UIViewController

@end

および appDelegate

FbSSOTrialDelegate.h

#import <UIKit/UIKit.h>
#import "FBConnect.h"

@class FbSSOTrialViewController;


@interface FbSSOTrialAppDelegate : NSObject <UIApplicationDelegate, FBSessionDelegate>
{
    Facebook *facebook;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet FbSSOTrialViewController *FbSSOTrialVC;
@property (nonatomic, retain) Facebook *facebook;

@end

FbSSOTrialDelegate.m

#import "FbSSOTrialAppDelegate.h"

@implementation FbSSOTrialAppDelegate

@synthesize window = _window;
@synthesize facebook = _facebook;
@synthesize FbSSOTrialVC = _FbSSOTrialVC;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    NSString *FbAppId = @"MY_APP_ID";

    self.window.rootViewController = self.FbSSOTrialVC;
    [self.window makeKeyAndVisible];

    self.facebook = [[Facebook alloc] initWithAppId:FbAppId andDelegate:self];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
        self.facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
        self.facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
    }

    if (![self.facebook isSessionValid]) {
        [self.facebook authorize:nil];
    }

    return YES;
}
4

1 に答える 1

0

私たちの話し合いの結果、アプリケーションの起動中に View Controller が適切にインスタンス化されていないと判断されました。対象の ViewController はストーリーボードからのものであると判断したため、推奨されるコード変更は次のとおりです。

// remove this
// self.window.rootViewController = self.FbSSOTrialVC;

// and replace it with:
self.FbSSOTrialVC = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"Fb SSO Trial VC"];
self.window.rootViewController = self.FbSSOTrialVC;

これには、ストーリーボードで、対象の ViewController に「Fb SSO Trial VC」という識別子が必要であることに注意してください (必要に応じて変更してください)。

于 2012-07-09T07:01:56.447 に答える