将委托设置为推送场景的父级

时间:2014-05-17 08:01:08

标签: cocos2d-iphone delegates

在我的HelloWorldLayer代码中,我将一个SettingsLayer场景推送到堆栈上。

        [[CCDirector sharedDirector] pushScene:[CCTransitionFade transitionWithDuration:0.5 scene:[SettingsLayer scene]]];

SettingsLayer需要调用HelloWorldLayer中实现的委托方法。但我很遗憾如何将HelloWorldLayer设置为SettingsLayer的委托。有人能告诉我这个适当的模式吗?我尝试了SettingsLayer的alloc-init,并在pushscene之前设置了委托,但这不起作用。

1 个答案:

答案 0 :(得分:0)

在您的代码中:

SettingsLayer *mySettingsLayer = [[SettingsLayer alloc] init]; 
mySettingsLayer.delegate = self; 
[[CCDirector sharedDirector] pushScene:[CCTransitionFade transitionWithDuration:0.5 
                                 scene:[[mySettingsLayer class] scene]]];

问题出在最后一行:

[[mySettingsLayer class] scene]

这将创建一个没有委托集的SettingsLayer类的新实例(它将为nil)。您之前创建的mySettingsLayer实际上并未显示为场景,它超出范围并取消分配(假设您使用的是ARC,如果不是,则实际上会泄漏mySettingsLayer对象)。

要修复它,请传入现有的mySettingsLayer实例:

[[CCDirector sharedDirector] pushScene:[CCTransitionFade transitionWithDuration:0.5 
                                 scene:mySettingsLayer]];