2015-06-11 4 views
0

Я добавляю эти межстраничные объявления StartApp, и я продолжаю получать сообщение об ошибке, когда я вызываю эту функцию в моей GameScene. Если я назову его в своем GameViewController, он отлично работает, и у меня нет ошибок, но он не работает в моей GameScene. Как бы это исправить. Благодаря!Я продолжаю получать эту ошибку «неожиданно нашел нуль при развертывании необязательного значения» Почему?

// Это функция, которая дает ошибку.

self.viewController.startAppAd! .loadAdWithDelegate (viewController.self)

//GameViewController.swift 

class GameViewController: UIViewController, STADelegateProtocol { 

    var startAppAd: STAStartAppAd? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     startAppAd = STAStartAppAd() 

     if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene { 
     // Configure the view. 
     let skView = self.view as! SKView 
     skView.showsFPS = true 
     skView.showsNodeCount = true 

     /* Sprite Kit applies additional optimizations to improve rendering performance */ 
     skView.ignoresSiblingOrder = true 
    } 


    // StartApp Ad loaded successfully 
    func didLoadAd(ad: STAAbstractAd) { 
     println("StartApp Ad had been loaded successfully") 
     startAppAd!.showAd() 
    } 
} 

//GameScene.swift 
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    var touch: UITouch = touches.first as! UITouch 
    var location = touch.locationInNode(self) 
    var node = self.nodeAtPoint(location) 

    if node.name == "levelone" { 

    self.viewController.startAppAd!.loadAdWithDelegate(viewController.self) 
} 
+0

Вы можете легко сказать, что startAppAd - это ничто, когда вы пытаетесь вызвать свою функцию. – Arbitur

+0

Где вы играли в GameScene.swift? Пожалуйста, уточните свой формат в вопросе. – Arbitur

+0

Я обновлю код в моих прикосновениях. – coding22

ответ

1

GameViewController создает GameScene во viewDidLoad, но вы никогда не присваиваем его GameScene для ссылки

Вы говорите, что у вас есть var viewController = GameViewController() в GameScene, но тот не тот же самый экземпляр, который создал сцену в первую очередь.

Вы можете добавить это к вашему viewDidLoad

scene.viewController = self, чтобы гарантировать, что экземпляр с объектом, не ноль startAppAd является тот, который вы ссылаетесь.

+0

что я объявляю сцену как. Я получаю сообщение об ошибке unresloved identifier. – coding22

+0

Вы прочитали свой собственный код? 'if let scene = GameScene.unarchiveFromFile (« GameScene ») как? GameScene {'внутри этой области. Но присмотревшись к этому фрагменту, который вы предоставляете, нет никакого смысла, поскольку вы никогда ничего не делаете с «сценой» –

+0

Да, я понимаю, что вы сказали, я забыл добавить строку кода. Я использую сцену, подобную этой scene.scaleMode = .AspectFill. Он работает сейчас кстати. Спасибо! – coding22

0

Ты силы разворачивания startAppAd (с помощью оператора!), Который говорит компилятору: «Я знаю, что это необязательно определенно имеет ценность; используйте его. ". Однако в вашем коде startAppAd предположительно равен нулю. Поэтому крушение.

Я предлагаю вам взять основной тур и читать от Apple "Swift Programming Language"

Смежные вопросы

 Смежные вопросы