質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

解決済

【Xcode,Swift】Buttonをタップしたら、Thread 1: signal SIGABRTが出てきた

nekokichi
nekokichi

総合スコア54

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1回答

0評価

0クリップ

283閲覧

投稿2018/08/21 15:48

編集2018/08/22 01:25

swift4
xcode9

ボタンをタップしたら、突然Thread 1: signal SIGABRTが出ました。
全部のOutletとActionの紐付けを解除し、もう1度つなぎなおしました。
変数名も一部前と変更しました。
しかし、解決しません。

ResultViewController

import UIKit class ResultViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. displayresult() result() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBOutlet weak var PLAYERLabel: UILabel! @IBOutlet weak var CPUULabel: UILabel! override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "WIN" { let gameover_instance = segue.destination as! GameOverViewController self.score = 1 gameover_instance.Score += self.score } } //勝敗の判定を表す変数 var winorlose = "" //スコアを保持する変数 var score = 0 //ChoiceHandViewControllerから渡される値を格納する変数 var Player_Hand = "" var CPU_Hand = "" //両者の手を表示 func displayresult() { //プレイヤーの手を表示 PLAYERLabel.text = Player_Hand //CPUの手を表示 CPUULabel.text = CPU_Hand } //勝敗を判定する処理 func result() { if Player_Hand == CPU_Hand { winorlose = "lose" print("bbbb") } else { winorlose = "win" print("aaaa") } } //プレイヤーが勝ちなら前画面に戻る、負けならゲーム終了 @IBAction func ChangeViewButton(_ sender: Any) { if winorlose == "win" { performSegue(withIdentifier: "WIN", sender: nil) } else if winorlose == "lose" { performSegue(withIdentifier: "LOSE", sender: nil) } } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. } */ }

GameOverViewController

import UIKit class GameOverViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. display_score() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBOutlet weak var ScoreLabel: UILabel! //ResultViewControllerで渡されたscoreを格納する変数 var Score = 0 //勝った回数を表示 func display_score() { ScoreLabel.text = "(Score)" } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. } */ }

下部がMainStoryBoard、コンソール、エラー箇所の画像です。
どこが原因なのか教えていただけないでしょうか?
よろしくお願いします。

イメージ説明
イメージ説明
イメージ説明
イメージ説明
イメージ説明
イメージ説明
イメージ説明
イメージ説明
イメージ説明

「追記」

上記のエラーコードがこちらです。

Could not cast value of type 'MyAcchiMuiteHoi.ChoiceHandViewController' (0x108a8ba50) to 'MyAcchiMuiteHoi.GameOverViewController' (0x108a8b990). 2018-08-22 09:38:55.508647+0900 MyAcchiMuiteHoi[8071:235142] Could not cast value of type 'MyAcchiMuiteHoi.ChoiceHandViewController' (0x108a8ba50) to 'MyAcchiMuiteHoi.GameOverViewController' (0x108a8b990). (lldb)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

fuzzball

2018/08/22 00:23

let gameover_instance = segue.destination as! GameOverViewController の上に print(segue.destination) を追加して出力を教えて下さい。
nekokichi

2018/08/22 00:38

<MyAcchiMuiteHoi.ChoiceHandViewController: 0x7fcf1dc29210> <MyAcchiMuiteHoi.ChoiceHandViewController: 0x7fcf1dc29210> Could not cast value of type 'MyAcchiMuiteHoi.ChoiceHandViewController' (0x10864da78) to 'MyAcchiMuiteHoi.GameOverViewController' (0x10864d9b8). 2018-08-22 09:36:59.398950+0900 MyAcchiMuiteHoi[7979:233301] Could not cast value of type 'MyAcchiMuiteHoi.ChoiceHandViewController' (0x10864da78) to 'MyAcchiMuiteHoi.GameOverViewController' (0x10864d9b8). (lldb)
nekokichi

2018/08/22 00:39

print(segue.destination)がない場合が、こちらです。Could not cast value of type 'MyAcchiMuiteHoi.ChoiceHandViewController' (0x108a8ba50) to 'MyAcchiMuiteHoi.GameOverViewController' (0x108a8b990). 2018-08-22 09:38:55.508647+0900 MyAcchiMuiteHoi[8071:235142] Could not cast value of type 'MyAcchiMuiteHoi.ChoiceHandViewController' (0x108a8ba50) to 'MyAcchiMuiteHoi.GameOverViewController' (0x108a8b990). (lldb)
fuzzball

2018/08/22 00:41

質問内に追記して下さい。(改行位置が分かりにくいです)
fuzzball

2018/08/22 00:50

``` で囲ってもらえますか‥。
fuzzball

2018/08/22 01:04 編集

エラーを見ると、ChoiceHandViewControllerに遷移しようとしていますが?(print追加前のログで十分です。print(segue.destination)を追加したときのログは不要なので削除して下さい)
nekokichi

2018/08/22 01:23

はい、もしwinorlose変数の値が"WIN"(Player_HandとCPU_Handが一致しない場合)なら、ChoiceHandViewControllerに遷移するようになってます。
nekokichi

2018/08/22 01:24

今シミュレータで試したのですが、GameOverVIewControllerへ遷移する場合は正常に動作します。おそらく、ChoiceViewControllerへ遷移する際の処理に問題があるかと思います。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています