메인 메뉴에 게임 장면이 표시되는 게임이 있고 플레이어가 패배하면 게임 장면이 다시 표시됩니다. 메뉴에서 게임 장면으로 전환 할 때 메뉴 , 즉이 성공적으로 호출됩니다. 내 문제는 그 반대가 발생하지 않는다는 것입니다 (게임 장면에서 메뉴 장면으로 전환 할 때 ,이 호출되지 않음).장면 사이를 전환 할 때 유지 사이클 문제가 발생했습니다.
내가 만든 새 주 메뉴 인스턴스와 인스턴스를 만드는 게임 장면 사이에 직접 강력한 참조주기가 있다고 의심됩니다. 나는 다음과 같은 얻을 런타임시
class GameScene: SKScene {
// Some stuff
// Now the function which is called when I want to present back the menu scene:
func lose() {
// Some stuff
// Delay is a helper function
delay(bySeconds: 2.0, closure: { [unowned self] in
for child in self.children {
child.removeFromParent()
}
unowned let menu = MainMenu(size: CGSize(width: 1152, height: 2048))
let reveal = SKTransition.fade(with: SKColor.black, duration: 1.0)
self.view?.presentScene(menu, transition: reveal)
})
}
}
: 나는 다음과 같은 내 gameScene의 코드를 편집하는 경우 사실의 문제, 나는 deinit의 전화를받을 수 있나요하지만, 런타임시 내 응용 프로그램 충돌 장면을 제공하는 동안 오류 : 여기
Attempted to retain deallocated object
지연의 정의입니다 :
public func delay(bySeconds seconds: Double, dispatchLevel: DispatchLevel = .main, closure: @escaping() -> Void) {
let dispatchTime = DispatchTime.now() + seconds
dispatchLevel.dispatchQueue.asyncAfter(deadline: dispatchTime, execute: closure)
}
public enum DispatchLevel {
case main, userInteractive, userInitiated, utility, background
var dispatchQueue: DispatchQueue {
switch self {
case .main: return DispatchQueue.main
case .userInteractive: return DispatchQueue.global(qos: .userInteractive)
case .userInitiated: return DispatchQueue.global(qos: .userInitiated)
case .utility: return DispatchQueue.global(qos: .utility)
case .background: return DispatchQueue.global(qos: .background)
}
}
}
을 그리고 여기 내 MAINMENU 클래스의 :
class MainMenu: SKScene {
let gameScene = GameScene(size: CGSize(width: 1152, height: 2048))
let reveal = SKTransition.fade(with: SKColor.black, duration: 1.0)
// Some stuff
// override func didMove(to ...
// Now the function which is called when I want to present the game scene:
func presentGame() {
view?.presentScene(gameScene, transition: reveal)
}
}
나는 여러 가지 시도를했지만 효과가 없었습니다 (예 : gameScene의 init 메소드에서 새 메뉴 인스턴스 설정).
나는 GameScene 클래스의 상수 메뉴의 "소유되지 않은" 정의를 제거하는 경우, 전환이 성공적으로 구성되어 있지만, deinit가 호출되지 않습니다.
제안 사항?
는 대신 '소유되지 않은 자기'의 '약한 자기를'시도? – Emptyless
예. 그렇지만 작동하지 않습니다. – gionti