在Cocos2d中没有调用Singleton方法

时间:2011-11-19 17:33:12

标签: objective-c ios cocos2d-iphone

我正在调用Singleton方法,当我尝试这样做时,它不会被调用。 我没有任何错误或任何错误,只是因为我无法看到CCLOG消息。

编译器出于什么原因不会给你错误并且不允许你调用方法?

[[GameManager sharedGameManager] openSiteWithLinkType:kLinkTypeDeveloperSite];

该方法定义如下:

-(void)openSiteWithLinkType:(LinkTypes)linkTypeToOpen
{

    CCLOG(@"WE ARE IN openSiteWithLinkType"); //I NEVER SEE THIS MESSAGE

    NSURL *urlToOpen = nil;

    if (linkTypeToOpen == kLinkTypeDeveloperSite) 
    {
        urlToOpen = [NSURL URLWithString:@"http://somesite.com"];    
    }

    if (![[UIApplication sharedApplication]openURL:urlToOpen])
    {
         CCLOG(@"%@%@",@"Failed to open url:",[urlToOpen description]);
        [self runSceneWithID:kMainMenuScene];
    }

}

这是我的单身代码:

#import "GameManager.h"
#import "MainMenuScene.h"


@implementation GameManager
static  GameManager* _sharedGameManager = nil;
@synthesize isMusicON;
@synthesize isSoundEffectsON;
@synthesize hasPlayerDied;

+(GameManager*) sharedGameManager
{
@synchronized([GameManager class])
    {

        if (!_sharedGameManager) 
        {
            [[self alloc] init];
            return _sharedGameManager;
        }
        return nil;
    }

}


+(id)alloc
{

    @synchronized ([GameManager class])
    {
        NSAssert(_sharedGameManager == nil,@"Attempted to allocate a second instance of the Game Manager singleton");
        _sharedGameManager = [super alloc];
        return _sharedGameManager;
    }
    return nil;
}

-(id)init
{
    self = [super init];
    if (self != nil)
    {
        //Game Manager initialized
        CCLOG(@"Game Manager Singleton, init");
        isMusicON = YES;
        isSoundEffectsON = YES;
        hasPlayerDied = NO;
        currentScene = kNoSceneUninitialized;
    }

    return self;

}


-(void) runSceneWithID:(SceneTypes)sceneID
{
    SceneTypes oldScene = currentScene;
    currentScene = sceneID;
    id sceneToRun = nil;


    switch (sceneID) 
    {
        case kMainMenuScene:
            sceneToRun = [MainMenuScene node];
            break;

        default:
            CCLOG(@"Unknown Scene ID, cannot switch scenes");
            return;
            break;
    }

    if (sceneToRun == nil)
    {

        //Revert back, since no new scene was found
        currentScene = oldScene;
        return;
    }




    //Menu Scenes have a value of < 100
    if (sceneID < 100) 
    {
        if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad)
        {
            CGSize screenSize = [CCDirector sharedDirector].winSizeInPixels;
            if (screenSize.width == 960.0f)
            {
                //iPhone 4 retina
                [sceneToRun setScaleX:0.9375f];
                [sceneToRun setScaleY:0.8333f];
                CCLOG(@"GM: Scaling for iPhone 4 (retina)");
            }
            else
            {
                [sceneToRun setScaleX:0.4688f];
                [sceneToRun setScaleY:0.4166f];
                CCLOG(@"GM: Scaling for iPhone 3G or older (non-retina)");
            }

        }    

    }


    if ([[CCDirector sharedDirector] runningScene] == nil)
    {
        [[CCDirector sharedDirector] runWithScene:sceneToRun];
    }
    else

    {
        [[CCDirector sharedDirector] replaceScene:sceneToRun];

    }

}


-(void)openSiteWithLinkType:(LinkTypes)linkTypeToOpen
{

    CCLOG(@"WE ARE IN openSiteWithLinkType");

    NSURL *urlToOpen = nil;

    if (linkTypeToOpen == kLinkTypeDeveloperSite) 
    {
        urlToOpen = [NSURL URLWithString:@"http://somesite.com"];    
    }

    if (![[UIApplication sharedApplication]openURL:urlToOpen])
    {
         CCLOG(@"%@%@",@"Failed to open url:",[urlToOpen description]);
        [self runSceneWithID:kMainMenuScene];
    }

}


-(void) test
{


    CCLOG(@"this is test");

}
@end

2 个答案:

答案 0 :(得分:2)

也许sharedGameManager返回nil?这不会导致错误。

编辑:问题出在您发布的新代码中:

if (!_sharedGameManager) {
    [[self alloc] init];
    return _sharedGameManager;
}
return nil;

如果_sharedGameManager为非零,则返回nil。你想要:

if (!_sharedGameManager) {
    [[self alloc] init];
}
return _sharedGameManager;

答案 1 :(得分:1)

检查this Cocoa With Love article如何制作合适的单身人士。