2015-03-16 3 views
0

Я пытаюсь следовать учебнику и создавать приложение Tic Tac Toe, но я получаю сообщение об ошибке «Swift Dynamic Cast Failed».Я продолжаю получать «Swift Dynamic Cast Failed». Как это исправить?

Мой код:

class ViewController: UIViewController 
{  
    var activePlayer = 1 
    var gameActive = true 
    //1 - Circle, 2 = Cross 

    var gameState = [0,0,0,0,0,0,0,0,0] 

    var winningCombinations = [[0,1,2], [3,4,5], [6,7,8], [0,3,6], [1,4,7], [2,5,8], [0,4,8], [2,4,6]] 

    @IBOutlet weak var button: UIButton! 

    @IBOutlet weak var gameOverLabel: UILabel! 
    @IBAction func gameOverPressed(sender: AnyObject) { 
     activePlayer = 1 
     gameActive = true 
     //1 - Circle, 2 = Cross 
     gameState = [0,0,0,0,0,0,0,0,0] 

     var abutton: UIButton 

     for var i = 0; i < 9; i++ { 
      abutton = view.viewWithTag(i) as UIButton! 
      abutton.setImage(nil, forState: .Normal) 


      } 

     gameOverLabel.hidden = true 
     gameOverButton.hidden = true 
     gameOverLabel.center = CGPointMake(gameOverLabel.center.x - 4000, gameOverLabel.center.y) 
     gameOverButton.center = CGPointMake(gameOverButton.center.x - 4000, gameOverButton.center.y) 

      } 
    @IBOutlet weak var gameOverButton: UIButton! 


    @IBAction func buttonPressed(sender: AnyObject) { 

     if gameState[sender.tag] == 0 && gameActive == true{ 

     var image = UIImage() 

     gameState[sender.tag] = activePlayer 
     if activePlayer == 1{ 
      image = UIImage(named: "circle.png")! 
      sender.setImage(image, forState: .Normal) 
      activePlayer = 2 
     }else if activePlayer == 2{ 
      image = UIImage(named: "cross.png")! 
      sender.setImage(image, forState: .Normal) 
      activePlayer = 1 

     } 
     sender.setImage(image, forState: .Normal) 

      for combination in winningCombinations { 


       if gameState[combination[0]] != 0 && gameState[combination[0]] == gameState[combination[1]] && gameState[combination[1]] == gameState[combination[2]]{ 
        var labelText = "Compiler has won" 
        if gameState[combination[0]] == 1{ 
         labelText = "Programmer has Won" 
        } 
        gameOverLabel.hidden = false 
        gameOverButton.hidden = false 

        UIView.animateWithDuration(0.5, animations: {() -> Void in 

         self.gameOverLabel.center = CGPointMake(self.gameOverLabel.center.x + 4000, self.gameOverLabel.center.y) 
         self.gameOverButton.center = CGPointMake(self.gameOverButton.center.x + 4000, self.gameOverButton.center.y) 

        }) 
        gameActive = false 

      } 


      } 




     } 
    } 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     gameOverLabel.hidden = true 
     gameOverButton.hidden = true 
     gameOverLabel.center = CGPointMake(gameOverLabel.center.x - 4000, gameOverLabel.center.y) 
     gameOverButton.center = CGPointMake(gameOverButton.center.x - 4000, gameOverButton.center.y) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
    override func viewDidLayoutSubviews() { 

    } 
} 

и ошибка, что я получаю, когда я пытаюсь запустить эту программу:

libswiftCore.dylib`swift_dynamicCastObjCClassUnconditional: 
0x10860f620: pushq %rbp 
0x10860f621: movq %rsp, %rbp 
0x10860f624: pushq %rbx 
0x10860f625: pushq %rax 
0x10860f626: movq %rsi, %rcx 
0x10860f629: movq %rdi, %rbx 
0x10860f62c: xorl %eax, %eax 
0x10860f62e: testq %rbx, %rbx 
0x10860f631: je  0x10860f64c    ; swift_dynamicCastObjCClassUnconditional + 44 
0x10860f633: movq 0x82756(%rip), %rsi  ; "isKindOfClass:" 
0x10860f63a: movq %rbx, %rdi 
0x10860f63d: movq %rcx, %rdx 
0x10860f640: callq 0x1086121ca    ; symbol stub for: objc_msgSend 
0x10860f645: testb %al, %al 
0x10860f647: movq %rbx, %rax 
0x10860f64a: je  0x10860f653    ; swift_dynamicCastObjCClassUnconditional + 51 
0x10860f64c: addq $0x8, %rsp 
0x10860f650: popq %rbx 
0x10860f651: popq %rbp 
0x10860f652: retq 
0x10860f653: leaq 0xcdc8(%rip), %rax  ; "Swift dynamic cast failed" 
0x10860f65a: movq %rax, 0x8ae57(%rip)  ; gCRAnnotations + 8 
0x10860f661: int3 
0x10860f662: nopw %cs:(%rax,%rax) 

Я новичок в программировании, так что я был бы признателен за простые ответы. Как это исправить?

ответ

0

Вы уверены, что все виды с тегом 0-9 являются UIButtons? Это кажется маловероятным, так как по умолчанию для любого представления используется 0.

for var i = 0; i < 9; i++ { 
     abutton = view.viewWithTag(i) as UIButton! 
     abutton.setImage(nil, forState: .Normal) 
     } 

Я полагаю, это захват UIView или какой-либо другой вид на раскадровку и пытается бросить его в UIButton, а затем сбой.

+0

Спасибо, я случайно использовал UIView с тегом 0 – TheCodeGram

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