Ios 使用调度块时EXC\u访问错误\u
我有一个游戏菜单,介绍场景和游戏本身。如果玩家死了,我想再次显示游戏菜单。当游戏开始时,菜单出现。按新游戏显示介绍场景,因为它应该。动画播放一段时间后,会触发self.scenendcallback()并显示游戏场景。当玩家死亡时,gameEndCallback()会因EXC\u BAD\u访问而崩溃 GameViewController.mIos 使用调度块时EXC\u访问错误\u,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,我有一个游戏菜单,介绍场景和游戏本身。如果玩家死了,我想再次显示游戏菜单。当游戏开始时,菜单出现。按新游戏显示介绍场景,因为它应该。动画播放一段时间后,会触发self.scenendcallback()并显示游戏场景。当玩家死亡时,gameEndCallback()会因EXC\u BAD\u访问而崩溃 GameViewController.m __weak GameViewController *weakSelf = self; IntroScene *intro
__weak GameViewController *weakSelf = self;
IntroScene *introScene = [IntroScene nodeWithFileNamed:@"IntroScene"];
introScene.scaleMode = SKSceneScaleModeAspectFill;
[skView presentScene:introScene];
introScene.sceneEndCallback = ^{
GameScene *scene = [GameScene nodeWithFileNamed:@"GameScene"];
scene.scaleMode = SKSceneScaleModeAspectFill;
SKTransition *transition = [SKTransition fadeWithDuration:2];
[skView presentScene:scene transition:transition];
scene.gameEndCallback = ^{
[weakSelf.navigationController popViewControllerAnimated:YES];
};
};
内部游戏场景.h
@property (nonatomic, copy) dispatch_block_t gameEndCallback;
是否有任何东西实际调用了
introScene.scenendcallback
?因为,如果没有该选项,scene.gameEndCallback
将为空,尝试调用它将因访问错误而崩溃。1。请提供事故日志。2.在调用之前是否检查gameEndCallback
是否为NULL
?这与崩溃没有直接关系,但您也应该重新获取对self的强引用,并在引用它之前检查nil,而不是像现在这样直接引用weakSelf。看@BorisVerebsky你是对的。gameEndCallback为空。但是为什么呢?是的,因为游戏场景是在内部场景之后呈现的。然后确保在正确的实例上调用它。你是什么意思?它在正确的实例上被调用,但不知怎么的gameEndCallback是空的…实际上,我只是在转换到场景之前分配了gameEndCallback。将这两条线路切换到一起使其工作。:)