在我的HelloWorldLayer代码中,我将一个SettingsLayer场景推送到堆栈上。
[[CCDirector sharedDirector] pushScene:[CCTransitionFade transitionWithDuration:0.5 scene:[SettingsLayer scene]]];
SettingsLayer需要调用HelloWorldLayer中实现的委托方法。但我很遗憾如何将HelloWorldLayer设置为SettingsLayer的委托。有人能告诉我这个适当的模式吗?我尝试了SettingsLayer的alloc-init,并在pushscene之前设置了委托,但这不起作用。
答案 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]];