View Will Appear 未开火
View Will Appear not firing
我正在使用 Swift 2 和 Xcode 7。今天早上,我的应用程序运行良好。然而,并非如此。在我的 viewDidLoad
方法中,我 print("viewdidload")
。在我的 viewDidAppear
方法中,我 print("viewdidappear
)。 Viewdidload 会打印到日志中,但 viewdidappear 不会。我的应用程序卡在启动屏幕上。这是我的完整代码:
//
// ViewController.swift
// Math Practice
//
// Created by Pranav Wadhwa on 8/7/15.
// Copyright (c) 2015 Pranav Wadhwa. All rights reserved.
//
import UIKit
import iAd
class ViewController: UIViewController, ADBannerViewDelegate {
@IBOutlet var iAdBannerView: ADBannerView?
func bannerViewDidLoadAd(banner: ADBannerView!) {
self.iAdBannerView?.hidden = false
}
@IBOutlet var startStop: UIButton!
func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
seconds = 0
minutes = 0
correct = 0
startStop.setTitle("Start", forState: .Normal)
total = 0
correctLabel.text = "0/0"
timerLabel.text = "00:00"
questionLabel.text = ""
button1.setTitle("", forState: .Normal)
button2.setTitle("", forState: .Normal)
button3.setTitle("", forState: .Normal)
button4.setTitle("", forState: .Normal)
timer.invalidate()
already = false
return true
}
func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
self.iAdBannerView?.hidden = true
}
var firstNumber = Int()
var secondNumber = Int()
var sign = String()
var arrayOfSigns = ["add", "subtract", "divide", "multiply"]
var correctAnswer = Int()
var buttonWithCorrectAnswer = Int()
var correct = Int()
var total = Int()
@IBOutlet var timerLabel: UILabel!
@IBOutlet var questionLabel: UILabel!
@IBOutlet var correctLabel: UILabel!
@IBOutlet var button1: UIButton!
@IBOutlet var button2: UIButton!
@IBOutlet var button3: UIButton!
@IBOutlet var button4: UIButton!
var timer = NSTimer()
func updateTime() {
seconds += 01
if seconds == 60 {
minutes++
seconds = 0
}
if seconds < 10 {
timerLabel.text = "\(minutes):0\(seconds)"
} else {
timerLabel.text = "\(minutes):\(seconds)"
}
}
@IBAction func start(sender: AnyObject) {
if already == false {
createQuestion()
startStop.setTitle("Pause", forState: .Normal)
already = true
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateTime"), userInfo: nil, repeats: true)
userLevel.text = ""
userImage.hidden = true
} else {
userImage.hidden = false
startStop.setTitle("Start", forState: .Normal)
questionLabel.text = ""
button1.setTitle("", forState: .Normal)
button2.setTitle("", forState: .Normal)
button3.setTitle("", forState: .Normal)
button4.setTitle("", forState: .Normal)
timer.invalidate()
already = false
}
}
@IBAction func reset(sender: AnyObject) {
if NSUserDefaults.standardUserDefaults().objectForKey("correctQuestions") != nil {
totalCorrectQuestions = NSUserDefaults.standardUserDefaults().objectForKey("correctQuestions") as! Int
}
userLevel.text = "Level " + String(usersLevel)
userImage.hidden = false
seconds = 0
minutes = 0
correct = 0
total = 0
correctLabel.text = "0/0"
timerLabel.text = "00:00"
questionLabel.text = ""
button1.setTitle("", forState: .Normal)
button2.setTitle("", forState: .Normal)
button3.setTitle("", forState: .Normal)
button4.setTitle("", forState: .Normal)
timer.invalidate()
already = false
}
var seconds = 0
var minutes = 0
var already = false
@IBAction func button1(sender: AnyObject) {
if buttonWithCorrectAnswer == 1 {
correct += 1
}
total += 1
createQuestion()
}
@IBAction func button2(sender: AnyObject) {
if buttonWithCorrectAnswer == 2 {
correct += 1
}
total += 1
createQuestion()
}
@IBAction func button3(sender: AnyObject) {
if buttonWithCorrectAnswer == 3 {
correct += 1
}
total += 1
createQuestion()
}
@IBAction func button4(sender: AnyObject) {
if buttonWithCorrectAnswer == 4 {
correct += 1
}
total += 1
createQuestion()
}
func createQuestion() {
correctLabel.text = "\(correct)/\(total)"
firstNumber = Int(arc4random_uniform(39))
secondNumber = Int(arc4random_uniform(39))
firstNumber -= 20
secondNumber -= 20
let i = Int(arc4random_uniform(4))
sign = arrayOfSigns[i]
if sign == "divide" {
firstNumber = Int(arc4random_uniform(39))
secondNumber = Int(arc4random_uniform(39))
firstNumber -= 20
secondNumber -= 20
}
if sign == "add" {
questionLabel.text = "\(firstNumber) + \(secondNumber)"
correctAnswer = firstNumber + secondNumber
}
if sign == "subtract" {
questionLabel.text = "\(firstNumber) - \(secondNumber)"
correctAnswer = firstNumber - secondNumber
}
if sign == "divide" {
firstNumber = firstNumber * secondNumber
questionLabel.text = "\(firstNumber) / \(secondNumber)"
correctAnswer = firstNumber / secondNumber
}
if sign == "multiply" {
questionLabel.text = "\(firstNumber) * \(secondNumber)"
correctAnswer = firstNumber * secondNumber
}
createAnswers()
}
var firstRandomAnswer = Int()
var secondRandomAnswer = Int()
var thirdRandomAnswer = Int()
var fourthRandomAnswer = Int()
func createAnswers() {
buttonWithCorrectAnswer = Int(arc4random_uniform(4) + 1)
//Insert Correct Answer
if buttonWithCorrectAnswer == 1 {
button1.setTitle("\(correctAnswer)", forState: .Normal)
} else if buttonWithCorrectAnswer == 2 {
button2.setTitle("\(correctAnswer)", forState: .Normal)
} else if buttonWithCorrectAnswer == 3 {
button3.setTitle("\(correctAnswer)", forState: .Normal)
} else if buttonWithCorrectAnswer == 4 {
button4.setTitle("\(correctAnswer)", forState: .Normal)
}
//Setup Fake Answer
if sign == "add" || sign == "subtract" || sign == "divide" {
firstRandomAnswer = Int(arc4random_uniform(79))
firstRandomAnswer -= 40
secondRandomAnswer = Int(arc4random_uniform(79))
secondRandomAnswer -= 40
while secondRandomAnswer == firstRandomAnswer {
secondRandomAnswer = Int(arc4random_uniform(79))
secondRandomAnswer -= 40
}
thirdRandomAnswer = Int(arc4random_uniform(79))
thirdRandomAnswer -= 40
while thirdRandomAnswer == secondRandomAnswer || thirdRandomAnswer == firstRandomAnswer {
thirdRandomAnswer = Int(arc4random_uniform(79))
thirdRandomAnswer -= 40
}
fourthRandomAnswer = Int(arc4random_uniform(79))
fourthRandomAnswer -= 40
while fourthRandomAnswer == thirdRandomAnswer || fourthRandomAnswer == secondRandomAnswer || fourthRandomAnswer == firstRandomAnswer {
fourthRandomAnswer = Int(arc4random_uniform(79))
fourthRandomAnswer -= 40
}
}
if sign == "multiply" {
firstRandomAnswer = Int(arc4random_uniform(799))
firstRandomAnswer -= 400
secondRandomAnswer = Int(arc4random_uniform(799))
secondRandomAnswer -= 400
while secondRandomAnswer == firstRandomAnswer {
secondRandomAnswer = Int(arc4random_uniform(799))
secondRandomAnswer -= 400
}
thirdRandomAnswer = Int(arc4random_uniform(799))
thirdRandomAnswer -= 400
while thirdRandomAnswer == secondRandomAnswer || thirdRandomAnswer == firstRandomAnswer {
thirdRandomAnswer = Int(arc4random_uniform(799))
thirdRandomAnswer -= 400
}
fourthRandomAnswer = Int(arc4random_uniform(799))
fourthRandomAnswer -= 400
while fourthRandomAnswer == thirdRandomAnswer || fourthRandomAnswer == secondRandomAnswer || fourthRandomAnswer == firstRandomAnswer {
fourthRandomAnswer = Int(arc4random_uniform(799))
fourthRandomAnswer -= 400
}
}
//Insert Fake Answers
if buttonWithCorrectAnswer != 1 {
button1.setTitle("\(firstRandomAnswer)", forState: .Normal)
}
if buttonWithCorrectAnswer != 2 {
button2.setTitle("\(secondRandomAnswer)", forState: .Normal)
}
if buttonWithCorrectAnswer != 3 {
button3.setTitle("\(thirdRandomAnswer)", forState: .Normal)
}
if buttonWithCorrectAnswer != 4 {
button4.setTitle("\(fourthRandomAnswer)", forState: .Normal)
}
}
@IBOutlet var backgroundImage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
super.viewDidAppear(false)
print("viewdidload")
correctLabel.text = "0/0"
timerLabel.text = "00:00"
self.canDisplayBannerAds = true
self.iAdBannerView?.delegate = self
self.iAdBannerView?.hidden = true
var image = arc4random_uniform(2)
image++
userImage.hidden = false
backgroundImage.image = UIImage(named: "background_" + String(image))
if NSUserDefaults.standardUserDefaults().objectForKey("correctQuestions") != nil {
totalCorrectQuestions = NSUserDefaults.standardUserDefaults().objectForKey("correctQuestions") as! Int
}
totalCorrectQuestions += correct
NSUserDefaults.standardUserDefaults().setObject(totalCorrectQuestions, forKey: "correctQuestions")
if NSUserDefaults.standardUserDefaults().objectForKey("userLevel") != nil {
usersLevel = NSUserDefaults.standardUserDefaults().objectForKey("userLevel") as! Int
}
NSUserDefaults.standardUserDefaults().setObject(usersLevel, forKey: "userLevel")
userLevel.text = "Level " + String(usersLevel)
pointsForUpgrade = usersLevel * 10
for var i = 1; i > 0; i++ {
totalCorrectQuestions += correct
NSUserDefaults.standardUserDefaults().setObject(totalCorrectQuestions, forKey: "correctQuestions")
if NSUserDefaults.standardUserDefaults().objectForKey("userLevel") != nil {
usersLevel = NSUserDefaults.standardUserDefaults().objectForKey("userLevel") as! Int
}
if totalCorrectQuestions >= pointsForUpgrade {
usersLevel++
pointsForUpgrade = usersLevel * 10
}
NSUserDefaults.standardUserDefaults().setObject(usersLevel, forKey: "userLevel")
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
var pointsForUpgrade = Int()
@IBOutlet var userImage: UIImageView!
var totalCorrectQuestions = Int()
var usersLevel = 1
@IBOutlet var userLevel: UILabel!
}
我哪里出错了?
代码不工作的原因是因为我试图在 viewDidLoad 方法中设置一个循环以使其永远工作。我需要删除它。
我正在使用 Swift 2 和 Xcode 7。今天早上,我的应用程序运行良好。然而,并非如此。在我的 viewDidLoad
方法中,我 print("viewdidload")
。在我的 viewDidAppear
方法中,我 print("viewdidappear
)。 Viewdidload 会打印到日志中,但 viewdidappear 不会。我的应用程序卡在启动屏幕上。这是我的完整代码:
//
// ViewController.swift
// Math Practice
//
// Created by Pranav Wadhwa on 8/7/15.
// Copyright (c) 2015 Pranav Wadhwa. All rights reserved.
//
import UIKit
import iAd
class ViewController: UIViewController, ADBannerViewDelegate {
@IBOutlet var iAdBannerView: ADBannerView?
func bannerViewDidLoadAd(banner: ADBannerView!) {
self.iAdBannerView?.hidden = false
}
@IBOutlet var startStop: UIButton!
func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
seconds = 0
minutes = 0
correct = 0
startStop.setTitle("Start", forState: .Normal)
total = 0
correctLabel.text = "0/0"
timerLabel.text = "00:00"
questionLabel.text = ""
button1.setTitle("", forState: .Normal)
button2.setTitle("", forState: .Normal)
button3.setTitle("", forState: .Normal)
button4.setTitle("", forState: .Normal)
timer.invalidate()
already = false
return true
}
func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
self.iAdBannerView?.hidden = true
}
var firstNumber = Int()
var secondNumber = Int()
var sign = String()
var arrayOfSigns = ["add", "subtract", "divide", "multiply"]
var correctAnswer = Int()
var buttonWithCorrectAnswer = Int()
var correct = Int()
var total = Int()
@IBOutlet var timerLabel: UILabel!
@IBOutlet var questionLabel: UILabel!
@IBOutlet var correctLabel: UILabel!
@IBOutlet var button1: UIButton!
@IBOutlet var button2: UIButton!
@IBOutlet var button3: UIButton!
@IBOutlet var button4: UIButton!
var timer = NSTimer()
func updateTime() {
seconds += 01
if seconds == 60 {
minutes++
seconds = 0
}
if seconds < 10 {
timerLabel.text = "\(minutes):0\(seconds)"
} else {
timerLabel.text = "\(minutes):\(seconds)"
}
}
@IBAction func start(sender: AnyObject) {
if already == false {
createQuestion()
startStop.setTitle("Pause", forState: .Normal)
already = true
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateTime"), userInfo: nil, repeats: true)
userLevel.text = ""
userImage.hidden = true
} else {
userImage.hidden = false
startStop.setTitle("Start", forState: .Normal)
questionLabel.text = ""
button1.setTitle("", forState: .Normal)
button2.setTitle("", forState: .Normal)
button3.setTitle("", forState: .Normal)
button4.setTitle("", forState: .Normal)
timer.invalidate()
already = false
}
}
@IBAction func reset(sender: AnyObject) {
if NSUserDefaults.standardUserDefaults().objectForKey("correctQuestions") != nil {
totalCorrectQuestions = NSUserDefaults.standardUserDefaults().objectForKey("correctQuestions") as! Int
}
userLevel.text = "Level " + String(usersLevel)
userImage.hidden = false
seconds = 0
minutes = 0
correct = 0
total = 0
correctLabel.text = "0/0"
timerLabel.text = "00:00"
questionLabel.text = ""
button1.setTitle("", forState: .Normal)
button2.setTitle("", forState: .Normal)
button3.setTitle("", forState: .Normal)
button4.setTitle("", forState: .Normal)
timer.invalidate()
already = false
}
var seconds = 0
var minutes = 0
var already = false
@IBAction func button1(sender: AnyObject) {
if buttonWithCorrectAnswer == 1 {
correct += 1
}
total += 1
createQuestion()
}
@IBAction func button2(sender: AnyObject) {
if buttonWithCorrectAnswer == 2 {
correct += 1
}
total += 1
createQuestion()
}
@IBAction func button3(sender: AnyObject) {
if buttonWithCorrectAnswer == 3 {
correct += 1
}
total += 1
createQuestion()
}
@IBAction func button4(sender: AnyObject) {
if buttonWithCorrectAnswer == 4 {
correct += 1
}
total += 1
createQuestion()
}
func createQuestion() {
correctLabel.text = "\(correct)/\(total)"
firstNumber = Int(arc4random_uniform(39))
secondNumber = Int(arc4random_uniform(39))
firstNumber -= 20
secondNumber -= 20
let i = Int(arc4random_uniform(4))
sign = arrayOfSigns[i]
if sign == "divide" {
firstNumber = Int(arc4random_uniform(39))
secondNumber = Int(arc4random_uniform(39))
firstNumber -= 20
secondNumber -= 20
}
if sign == "add" {
questionLabel.text = "\(firstNumber) + \(secondNumber)"
correctAnswer = firstNumber + secondNumber
}
if sign == "subtract" {
questionLabel.text = "\(firstNumber) - \(secondNumber)"
correctAnswer = firstNumber - secondNumber
}
if sign == "divide" {
firstNumber = firstNumber * secondNumber
questionLabel.text = "\(firstNumber) / \(secondNumber)"
correctAnswer = firstNumber / secondNumber
}
if sign == "multiply" {
questionLabel.text = "\(firstNumber) * \(secondNumber)"
correctAnswer = firstNumber * secondNumber
}
createAnswers()
}
var firstRandomAnswer = Int()
var secondRandomAnswer = Int()
var thirdRandomAnswer = Int()
var fourthRandomAnswer = Int()
func createAnswers() {
buttonWithCorrectAnswer = Int(arc4random_uniform(4) + 1)
//Insert Correct Answer
if buttonWithCorrectAnswer == 1 {
button1.setTitle("\(correctAnswer)", forState: .Normal)
} else if buttonWithCorrectAnswer == 2 {
button2.setTitle("\(correctAnswer)", forState: .Normal)
} else if buttonWithCorrectAnswer == 3 {
button3.setTitle("\(correctAnswer)", forState: .Normal)
} else if buttonWithCorrectAnswer == 4 {
button4.setTitle("\(correctAnswer)", forState: .Normal)
}
//Setup Fake Answer
if sign == "add" || sign == "subtract" || sign == "divide" {
firstRandomAnswer = Int(arc4random_uniform(79))
firstRandomAnswer -= 40
secondRandomAnswer = Int(arc4random_uniform(79))
secondRandomAnswer -= 40
while secondRandomAnswer == firstRandomAnswer {
secondRandomAnswer = Int(arc4random_uniform(79))
secondRandomAnswer -= 40
}
thirdRandomAnswer = Int(arc4random_uniform(79))
thirdRandomAnswer -= 40
while thirdRandomAnswer == secondRandomAnswer || thirdRandomAnswer == firstRandomAnswer {
thirdRandomAnswer = Int(arc4random_uniform(79))
thirdRandomAnswer -= 40
}
fourthRandomAnswer = Int(arc4random_uniform(79))
fourthRandomAnswer -= 40
while fourthRandomAnswer == thirdRandomAnswer || fourthRandomAnswer == secondRandomAnswer || fourthRandomAnswer == firstRandomAnswer {
fourthRandomAnswer = Int(arc4random_uniform(79))
fourthRandomAnswer -= 40
}
}
if sign == "multiply" {
firstRandomAnswer = Int(arc4random_uniform(799))
firstRandomAnswer -= 400
secondRandomAnswer = Int(arc4random_uniform(799))
secondRandomAnswer -= 400
while secondRandomAnswer == firstRandomAnswer {
secondRandomAnswer = Int(arc4random_uniform(799))
secondRandomAnswer -= 400
}
thirdRandomAnswer = Int(arc4random_uniform(799))
thirdRandomAnswer -= 400
while thirdRandomAnswer == secondRandomAnswer || thirdRandomAnswer == firstRandomAnswer {
thirdRandomAnswer = Int(arc4random_uniform(799))
thirdRandomAnswer -= 400
}
fourthRandomAnswer = Int(arc4random_uniform(799))
fourthRandomAnswer -= 400
while fourthRandomAnswer == thirdRandomAnswer || fourthRandomAnswer == secondRandomAnswer || fourthRandomAnswer == firstRandomAnswer {
fourthRandomAnswer = Int(arc4random_uniform(799))
fourthRandomAnswer -= 400
}
}
//Insert Fake Answers
if buttonWithCorrectAnswer != 1 {
button1.setTitle("\(firstRandomAnswer)", forState: .Normal)
}
if buttonWithCorrectAnswer != 2 {
button2.setTitle("\(secondRandomAnswer)", forState: .Normal)
}
if buttonWithCorrectAnswer != 3 {
button3.setTitle("\(thirdRandomAnswer)", forState: .Normal)
}
if buttonWithCorrectAnswer != 4 {
button4.setTitle("\(fourthRandomAnswer)", forState: .Normal)
}
}
@IBOutlet var backgroundImage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
super.viewDidAppear(false)
print("viewdidload")
correctLabel.text = "0/0"
timerLabel.text = "00:00"
self.canDisplayBannerAds = true
self.iAdBannerView?.delegate = self
self.iAdBannerView?.hidden = true
var image = arc4random_uniform(2)
image++
userImage.hidden = false
backgroundImage.image = UIImage(named: "background_" + String(image))
if NSUserDefaults.standardUserDefaults().objectForKey("correctQuestions") != nil {
totalCorrectQuestions = NSUserDefaults.standardUserDefaults().objectForKey("correctQuestions") as! Int
}
totalCorrectQuestions += correct
NSUserDefaults.standardUserDefaults().setObject(totalCorrectQuestions, forKey: "correctQuestions")
if NSUserDefaults.standardUserDefaults().objectForKey("userLevel") != nil {
usersLevel = NSUserDefaults.standardUserDefaults().objectForKey("userLevel") as! Int
}
NSUserDefaults.standardUserDefaults().setObject(usersLevel, forKey: "userLevel")
userLevel.text = "Level " + String(usersLevel)
pointsForUpgrade = usersLevel * 10
for var i = 1; i > 0; i++ {
totalCorrectQuestions += correct
NSUserDefaults.standardUserDefaults().setObject(totalCorrectQuestions, forKey: "correctQuestions")
if NSUserDefaults.standardUserDefaults().objectForKey("userLevel") != nil {
usersLevel = NSUserDefaults.standardUserDefaults().objectForKey("userLevel") as! Int
}
if totalCorrectQuestions >= pointsForUpgrade {
usersLevel++
pointsForUpgrade = usersLevel * 10
}
NSUserDefaults.standardUserDefaults().setObject(usersLevel, forKey: "userLevel")
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
var pointsForUpgrade = Int()
@IBOutlet var userImage: UIImageView!
var totalCorrectQuestions = Int()
var usersLevel = 1
@IBOutlet var userLevel: UILabel!
}
我哪里出错了?
代码不工作的原因是因为我试图在 viewDidLoad 方法中设置一个循环以使其永远工作。我需要删除它。