【问题标题】:self presentViewController:viewController animated:YES not workingself presentViewController:viewController 动画:YES 不工作
【发布时间】:2016-11-17 00:28:39
【问题描述】:

我没有使用任何类型的豆荚(不使用可可豆荚)

我已将我的AppController 设置如下:(这是我的viewController

@interface AppController : UIViewController <UIApplicationDelegate, GIDSignInDelegate , GIDSignInUIDelegate>

然后当我打电话时:[[GIDSignIn sharedInstance] signIn]; 那么:

[self presentViewController:viewController animated:YES completion:nil];

创建问题并向我显示错误:

其视图不在窗口层次结构中!

或者如果我删除 UIViewController 并将其替换为 UIResponder 则错误:

UIDelegate 必须是 |UIViewController|或实施 |signIn:presentViewController:|和 |signIn:dismissViewController:| 来自|GIDSignInUIDelegate|的方法

我只想显示google sign-in UI

我错过了什么? 我对控制器做错了吗? 我在这里真的需要帮助。 我的目标 c 几乎可以忽略不计。 我没有找到任何与 cocos2dxgoogle 登录 相关的代码。 那里只有 swift 代码。

这是我做错的代码:

AppController.h 文件代码。

// AppController.h
#import <UIKit/UIKit.h>

#import <GoogleSignIn/GoogleSignIn.h>
#import <GoogleSignIn/GIDAuthentication.h>
#import <GoogleSignIn/GIDGoogleUser.h>
#import <GoogleSignIn/GIDProfileData.h>
#import <GoogleSignIn/GIDSignInButton.h>
#import <GoogleSignIn/GoogleSignIn.h>

@class RootViewController;


@interface AppController : UIViewController <UIApplicationDelegate, GIDSignInDelegate , GIDSignInUIDelegate> {
    UIWindow *window;
    RootViewController* viewController;
}

@property(nonatomic, retain) UIWindow *window;
@property(nonatomic, readonly) RootViewController* viewController;

@end

AppController.mm 文件代码。

//-------------------------------------------------
// AppController.mm


#import "AppController.h"
#import "platform/ios/CCEAGLView-ios.h"
#import "cocos2d.h"
#import "AppDelegate.h"
#import "RootViewController.h"
#import "HelloWorld_ios.h"


//#import <GoogleSignIn/G>

@implementation AppController


static NSString * const kClientID =@"884216498839-g2j0jlq70k249m2ri3lchp4bq1sf1qmb.apps.googleusercontent.com";

#pragma mark -
#pragma mark Application lifecycle

// cocos2d application instance
static AppDelegate s_sharedApplication;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    [GIDSignIn sharedInstance].delegate = self;
    [GIDSignIn sharedInstance].uiDelegate = self;
    [GIDSignIn sharedInstance].clientID = kClientID;
    [GIDSignIn sharedInstance].shouldFetchBasicProfile = YES;

    cocos2d::Application *app = cocos2d::Application::getInstance();
    app->initGLContextAttrs();
    cocos2d::GLViewImpl::convertAttrs();

    window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];

    CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [window bounds]
                                         pixelFormat: (NSString*)cocos2d::GLViewImpl::_pixelFormat
                                         depthFormat: cocos2d::GLViewImpl::_depthFormat
                                  preserveBackbuffer: NO
                                          sharegroup: nil
                                       multiSampling: NO
                                     numberOfSamples: 0 ];

    [eaglView setMultipleTouchEnabled:NO];

    _viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    _viewController.wantsFullScreenLayout = YES;
    _viewController.view = eaglView;

    // Set RootViewController to window
    if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)
    {
        // warning: addSubView doesn't work on iOS6
        [window addSubview: _viewController.view];
    }
    else
    {
        // use this method on ios6
        [window setRootViewController:_viewController];
    }

    [window makeKeyAndVisible];

    [[UIApplication sharedApplication] setStatusBarHidden:true];

    // IMPORTANT: Setting the GLView should be done after creating the RootViewController
    cocos2d::GLView *glview = cocos2d::GLViewImpl::createWithEAGLView(eaglView);
    cocos2d::Director::getInstance()->setOpenGLView(glview);

    app->run();

    [[GIDSignIn sharedInstance] signInSilently];

    return YES;
}


- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary *)options {

    return [[GIDSignIn sharedInstance] handleURL:url
                               sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                                      annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}

// For ios 8 ....

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {

    return [[GIDSignIn sharedInstance] handleURL:url
                               sourceApplication:sourceApplication
                                      annotation:annotation];
}



- (void)signIn:(GIDSignIn *)signIn
didSignInForUser:(GIDGoogleUser *)user
     withError:(NSError *)error {
}

- (void)signInWillDispatch:(GIDSignIn *)signIn error:(NSError *)error {

}

- (void)signIn:(GIDSignIn *)signIn presentViewController:(UIViewController *)viewController
{
    [self presentViewController:viewController animated:YES completion:nil];
}

// Dismiss the "Sign in with Google" view
- (void)signIn:(GIDSignIn *)signIn
dismissViewController:(UIViewController *)viewController {

    [self dismissViewControllerAnimated:YES completion:nil];

}





- (void)applicationWillResignActive:(UIApplication *)application {

}

- (void)applicationDidBecomeActive:(UIApplication *)application {

}

- (void)applicationDidEnterBackground:(UIApplication *)application {


    cocos2d::Application::getInstance()->applicationDidEnterBackground();
}

- (void)applicationWillEnterForeground:(UIApplication *)application {

    cocos2d::Application::getInstance()->applicationWillEnterForeground();
}

- (void)applicationWillTerminate:(UIApplication *)application {

}


#pragma mark -
#pragma mark Memory management

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {

}


- (void)dealloc {
    [window release];
    [super dealloc];
}


@end

HelloWorld_ios.h 文件代码。

// =============================================
// HelloWorld_ios.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <GoogleSignIn/GoogleSignIn.h>
#import <GoogleSignIn/GIDAuthentication.h>
#import <GoogleSignIn/GIDGoogleUser.h>
#import <GoogleSignIn/GIDProfileData.h>
#import <GoogleSignIn/GIDSignInButton.h>
#import <GoogleSignIn/GoogleSignIn.h>
#include "AppController.h"

@interface HelloWorld_ios :  UIViewController <GIDSignInUIDelegate, GIDSignInDelegate,UIAlertViewDelegate>
{//@interface HelloWorld_ios


}

- (void)initialize;

@end

HelloWorld_ios.mm 代码在这里调用登录 按下按钮。

// =============================================
// HelloWorld_ios.mm


#import "AppController.h"
#import "AppDelegate.h"
#import "HelloWorld_ios.h"
#import "../../proj.ios_mac/ios/AppController.h"

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#ifdef __OBJC__
#import "IOSNDKHelper.h"
#endif
#endif

@implementation HelloWorld_ios

//C++ Call via NDK
- (void)initialize
{
    [IOSNDKHelper addNDKReceiver:self moduleName:@"receiver_LocalNotifications"];
    CCLOG("test5 in the intiallize()...ios...");


}

- (void) CallingForSignIn:(NSObject*) params
{
    NSMutableDictionary *mapData = (NSMutableDictionary*) params;
    NSString* receiveData = [mapData objectForKey:@"testData"];
    NSLog(@"This is test1 NDK %@",receiveData);

//    [[GIDSignIn sharedInstance] signOut];
//    [[GIDSignIn sharedInstance] signInSilently];
    [[GIDSignIn sharedInstance] signIn];

}


- (void) CallingForSignOut:(NSObject*) params
{
    NSMutableDictionary *mapData = (NSMutableDictionary*) params;
    NSString* receiveData = [mapData objectForKey:@"testData"];
    NSLog(@"This is test1 NDK %@",receiveData);

    [[GIDSignIn sharedInstance] signOut];

}


@end

【问题讨论】:

  • 我有点希望看到更多的代码和你的声明

标签: ios objective-c cocos2d-iphone cocos2d-x google-signin


【解决方案1】:

“其视图不在窗口层次结构中!”问题几乎是由于:

您已经展示了视图控制器(但尚未展示)并尝试在其上方展示另一个视图。

【讨论】:

  • 我在这里添加了我的代码,也许你能找到答案。
【解决方案2】:

您是否将AppController 添加到rootviewcontroller?错误信息清楚地抱怨它。

【讨论】:

  • 我在那里添加了我的代码,你可以看到其中有什么问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2016-05-16
相关资源
最近更新 更多