2012-07-09 4 views
1

저는 현재 모바일 앱에서 Facebook의 싱글 사인온 기능을 사용하고 있습니다. 지금까지 필자는 앱을 테스트하면서 Facebook 인증 대화 상자에 접근 할 수있었습니다. 하지만 앱을 승인 할 때 확인 버튼을 클릭하면 내 화면에서 검은 색 화면이 표시됩니다. 이것이 rootViewController의 지정으로 인한 것인지 궁금합니다.아주 이상한 경고

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

I : FbSSOTrialDelegate.m

self.window.rootViewController = self.FbSSOTrialVC;

나는 또한 Incompatible pointer types assigning to 'UIViewController *' from 'FbSSOTrialViewController *' 말을 경고하고 내 콘솔에서이 로그를 얻을 내에서 코드 줄에서

enter image description here

분명히 이상하다고 말하기 때문에 그 FbSSOTrialVCUIViewController의 하위 클래스입니다.

왜 이런 일이 벌어 지는지 나에게 알려주세요. 아래 논의부터 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; 
} 
+0

'FbSSOTrialViewController' * 실제로 * UIViewController를 확장합니까? –

+0

예, 편집을 참조하십시오. – Grauzten

+0

좋아, 다음은 빛을 비출 수있는 까다로운 세부 사항입니다. 별표를 확인하십시오 ... 오류 메시지에서 FbSSOTrialViewController : 'Assigning'UIViewController * 'from FbSSOTrialViewController'에 의심스러운 오류가 있습니다. 여기에 오류가 있는지 궁금해 지거나, 실제로 포인터가 없다고 생각한 곳이 있는지 궁금합니다. (오류가 무엇인지 *) * 그렇다면 어떻게 self.FbSSrialVC '초기화 중입니다. 그게 네 문제가있는 곳인 것 같아. 인스턴스에 대한 포인터 대신 Class 객체로 설정된 것처럼 보입니다. –

답변

0

의 다른 코드가 있었다, 그것은 결정되었다 뷰 컨트롤러가 애플리케이션이 시작될 때 제대로 인스턴스화되지 않았 음을 나타냅니다. 우리는 관심의 ViewController는 스토리 보드에서 오는 것으로 판단되므로 권장 코드 변경은 다음과 같다 :이 스토리 보드에 관심의 ViewController는 "FB SSO 평가판 식별자를 가져야한다고 요구하는

// 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; 

주 VC "(적절하게 변경).