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

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

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

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

Q&A

解決済

2回答

724閲覧

前の画面にコードで画面遷移する(戻る)とThread 1: signal SIGABRTになる

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2019/01/19 02:21

編集2019/01/19 10:01

Navigation Controllerを使って画面遷移をさせようとしているのですが、右から真ん中へ遷移するときにThread 1: signal SIGABRTになってしまいます。
以前は同じやり方をしてもエラーにならなかったのですが、なぜでしょうか?

Storyboard、エラーメッセージ、ViewController.swiftは以下の通りです。

Storyboard

errormassage

12019-01-19 11:06:49.953160+0900 test[25938:4428696] libMobileGestalt MobileGestalt.c:890: MGIsDeviceOneOfType is not supported on this platform. 22019-01-19 11:06:53.392363+0900 test[25938:4428696] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<test.ViewController: 0x7fbdd1c2c620>) has no segue with identifier 'toViewController''

ViewControllerswift

1 2//右のViewControllerとリンクしています 3//真ん中VCから右のVCへのStoryboard Segueのidは toViewController です 4//真ん中VCの「次の画面に遷移」をctrlを押しながら"show"で右のVCとつなげました。 5 6import UIKit 7 8class ViewController: UIViewController { 9 10 11 @IBOutlet weak var nextButton: UIButton! 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 // Do any additional setup after loading the view, typically from a nib. 16 } 17 18 19 @IBAction func nextButton(_ sender: Any) { 20 DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { 21 self.performSegue(withIdentifier: "toViewController", sender: nil) 22 } 23 } 24}

追記:セグエのid
イメージ説明

またこのようにセグエを接続すると画面遷移はできますが、次の画面へ進むようになってしまいます。
「真ん中の画面に戻る」ということを実現したいです。

イメージ説明

追記 : Unwindを使って前の画面に遷移させようとした場合

TopViewController

1import UIKit 2 3class TopViewController: UIViewController { 4 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 // Do any additional setup after loading the view, typically from a nib. 9 } 10 11 override func didReceiveMemoryWarning() { 12 super.didReceiveMemoryWarning() 13 // Dispose of any resources that can be recreated. 14 } 15 16 @IBAction func backToTop(segue: UIStoryboardSegue) { 17 18 } 19 20}

ViewController

1import UIKit 2 3class ViewController: UIViewController { 4 5 6 @IBOutlet weak var nextButton: UIButton! 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 // Do any additional setup after loading the view, typically from a nib. 11 } 12}

イメージ説明

Nextボタンをcntrlを押しながらExitまでドラッグし、接続しています。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

自己解決しました。

self.performSegue(withIdentifier: "toViewController", sender: nil)

このコードは「遷移元に戻る」のためのコードではないのでエラーになりました。

NavigationControllerでは以下のコードを使うことで「遷移元に戻る」ができました。

self.navigationController?.popViewController(animated: true)

たったこれだけの結論に至るまで時間がかかってしまいましたが、回答していただきありがとうございます。

投稿2019/01/19 10:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

has no segue with identifier 'toViewController'

と書いてありますので、segueが間違っているとのエラーです。
細かいことですが、大文字、小文字等誤字脱字を見直してください。

投稿2019/01/19 04:58

hameji001

総合スコア639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/19 09:15

何回確認しても間違いないです。コピペをしてますし繋ぎなおしているのですが、このエラーになってしまいます。
hameji001

2019/01/19 09:37 編集

そもそもを見たら、 navigationcontrollerを使った画面遷移なんですよね? navigationを戻るようにコードすれば良いだけですよ。 調べればすぐわかると思います。 新たなsegueをつなぐ必要自体がありません。 3枚目のスクリーンショットは navigationcontrollerが表示されてないのはなぜですか??? 違うものを混ぜたんですか? 混乱してしまいます。 またdispatchqueueにしてる理由はなんですか? それも不要だと思いますけど、、、 dispatchqueueの意味わかってますか? 待たせたいなら、違うfunctionを使うべきです。
退会済みユーザー

退会済みユーザー

2019/01/19 10:10 編集

はい、navigationcontrollerを使った画面遷移です。実際にはアラートを表示させ、1つ前の画面に戻るという動作をさせたいと思っています。 新たなSegueを使ったのは試してにやってみたという程度なので、、、余計なことを書いてしまいました。すみません。またスクリーンショットではSegueで切れてしまっていますが、navigationcontrollerはちゃんと繋がっています。(訂正:すみません、スクリーンショット確かにおかしいですね。すぐに接続しなおしているのでnavigationcontrollerと繋がっています。) dispatchqueueは実際のコードで使っているので質問の簡潔なコードにも書かせてもらいました。 質問にさらに追記しますが、遷移先のボタンをcntrlを押しながら上部のExitまでドラッグし「Unwind」で戻ろうとしましたが、ボタンを押してもアクションを起こしませんでした。 >navigationを戻るようにコードすれば良いだけですよ。 すみません、調べきれていないのかもしれないです。dismissでできると思ったのですがnavigationcontrollerではできないみたいで分からず質問させていただきした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問