Loading Screen Trouble?

I am trying to implement a loading screen as follows. (Translating obj-c code from “Learn cocos2d 2 Game Development for iOS” by Steffen Itterheim and Andreas Low). I currently have a title screen and a level one screen. I will point out the line that gives me trouble.

#ifndef _LOADING_SCREEN_H_
#define _LOADING_SCREEN_H_

#include "cocos2d.h"
USING_NS_CC;

typedef enum
{
    kInvalidScene = 0,
    kTitleScreen,
    kLevelOne,
} TargetSceneType;

class LoadingScreen : public CCScene
{
private:
    LoadingScreen();
    ~LoadingScreen();
    CCScene * initWithTargetScene(TargetSceneType tst);
    void loadScene(float dt);
    TargetSceneType targetSceneType;
public:
    static CCScene * loadingScreenForTarget(TargetSceneType tst);

};
#endif
#include "Screen\LoadingScreen\LoadingScreen.h"
#include "Screen\TitleScreen\TitleScreen.h"
#include "Screen\LevelOne\LevelOne.h"

LoadingScreen::LoadingScreen()
{
    targetSceneType = kInvalidScene;
}

LoadingScreen::~LoadingScreen()
{
}

CCScene * LoadingScreen::initWithTargetScene(TargetSceneType tst)
{
    CCScene::init();

    targetSceneType = tst;

    CCLabelTTF * label = CCLabelTTF::create("Loading...", "font.ttf", 48.0f);

    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
    CCPoint visibleOrigin = CCDirector::sharedDirector()->getVisibleOrigin();
    float visibleRight = visibleSize.width + visibleOrigin.x;
    //float visibleTop = visibleSize.height + visibleOrigin.y;

    label->setAnchorPoint( ccp(1.0f, 0.0f) );
    label->setPosition(ccp(visibleRight, 0)); 
    addChild(label);

    //THE LINE BELOW IS PROBLEMATIC. THE BOOK SAYS TO SET THE DELAY TO 0.0f
    //SO THAT loadScene() GETS CALLED ON THE NEXT FRAME. HOWEVER, USING MARMALADE SIMULATOR
    //(ON PC) IF THE DELAY IS SET TOO LOW THE NEW SCENE SHOWS UP FOR A SPLIT SECOND
    //AND GOES BACK TO THE LOADING SCREEN INDEFINITELY
    this->scheduleOnce(schedule_selector(LoadingScreen::loadScene), 1.0f);

    return this;
}

void LoadingScreen::loadScene(float dt)
{
    CCDirector * dir = CCDirector::sharedDirector();

    switch(targetSceneType)
    {
    case kTitleScreen:
        dir->replaceScene( CCTransitionFade::create(0.5f, TitleScreen::scene() ) );
        break;
    case kLevelOne:
        dir->replaceScene( CCTransitionFade::create(0.5f, LevelOne::scene() ) );
        break;
    default:
        CCAssert(0, "Target Scene not supported");
    }
}

CCScene * LoadingScreen::loadingScreenForTarget(TargetSceneType tst)
{
    LoadingScreen * ls = new LoadingScreen();
    ls->autorelease();
    return ls->initWithTargetScene(tst);
}

If the delay is set to 1.0f, the scene gets replaced properly and the loading scene gets deleted. The loading scene does not get deleted (~LoadingScreen() does not get called) if the delay is too low. I would like to know why this is happening, because it is supposed to be set to 0.0f according to the book. The original obj-c code can be downloaded for free here:
http://www.apress.com/9781430244165. You can find it under CH05/ScenesAndLayers01. If anyone can help me understand what is happening here, or let me know if I am doing anything wrong in the code above, or give any feedback about implementing a loading screen I would greatly appreciate it. Thank you.