如何确保我在网点加载之前不会访问网点



我正在制作一个交互式故事应用程序。pagecontroller:uiviewController控制着故事,第一页加载正常,但是当我进行选择时,应用程序会崩溃,致命错误在解开时出乎意料地发现了无。在线:

firstChoiceButton.setTitle(firstChoice.title, for: UIControlState())

查找它,似乎有一个可选的...也许它没有与我的story.swift文件交流?

也许是@iboutlet FirstChoiceButton?但是我所有的 @iboutlet/动作都挂在我想...帮助吗?

import UIKit
class PageController: UIViewController {
    @IBOutlet weak var storyLabel: UILabel!
    @IBOutlet weak var firstChoiceButton: UIButton!
    @IBOutlet weak var secondChoiceButton: UIButton!
    @IBOutlet weak var backdrop2: UIImageView!
    var page: Page?
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)}
    init(page: Page) {
        self.page = page
        super.init(nibName: nil, bundle: nil)}
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()}
    override func viewDidLoad() {
        super.viewDidLoad()

    if let page = page {
            let attributedString = NSMutableAttributedString(string:    page.story.text)
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.lineSpacing = 5
            attributedString.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSMakeRange(0, attributedString.length))
    if let firstChoice = page.firstChoice {
        firstChoiceButton.setTitle(firstChoice.title, for: UIControlState())
            firstChoiceButton.addTarget(self, action: #selector(PageController.loadFirstChoice), for: .touchUpInside)
            } else {
                firstChoiceButton.setTitle("Meep", for: UIControlState())
                firstChoiceButton.addTarget(self, action: #selector(PageController.playAgain), for: .touchUpInside)
            }
            if let secondChoice = page.secondChoice {
                secondChoiceButton.setTitle(secondChoice.title, for: UIControlState())
               secondChoiceButton.addTarget(self, action: #selector(PageController.loadSecondChoice), for: .touchUpInside)
            }
        storyLabel.attributedText = attributedString
    }
    }
    @IBAction func loadFirstChoice() {
        if let page = page, let firstChoice = page.firstChoice {
            let nextPage = firstChoice.page
            let pageController = PageController(page: nextPage)
            //    playSound(nextPage.story.soundEffectURL as URL)
            navigationController?.pushViewController(pageController, animated: true)
        }
    }
    @IBAction func loadSecondChoice() {
        if let page = page, let secondChoice = page.secondChoice {
            let nextPage = secondChoice.page
            let pageController = PageController(page: nextPage)
          //  playSound(nextPage.story.soundEffectURL as URL)
            navigationController?.pushViewController(pageController, animated: true)
        }
    }
    @IBAction func playAgain() {
        navigationController?.popToRootViewController(animated: true)
    }
}

您应该以编程方式实例化视图控制器,然后将其推入导航控制器堆栈。这是一些可以帮助您入门的代码。

func loadFirstChoice() {
        if let page = page, let firstChoice = page.firstChoice {
            let nextPage = firstChoice.page
            //let pageController = PageController(page: nextPage)
            //    playSound(nextPage.story.soundEffectURL as URL)
            let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            if let newPage = mainStoryboard.instantiateViewController(withIdentifier: "newpage") as? PageController { //newpage is the storyboard id of the view controller
                newPage.page = nextPage
                navigationController?.pushViewController(newPage, animated: true)
            }
        }
    }

相关内容

  • 没有找到相关文章

最新更新