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

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

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

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

2599閲覧

Segueでの画面遷移でエラーが発生します。

harima

総合スコア17

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2017/06/27 07:58

編集2017/06/28 02:27

ViewController画面はMapを表示、InfoVC画面はボタンを配置してVCに戻るとWebVC画面に遷移する。WebVC画面はホームページを表示する。
VCとInfoVCの間のセグエの遷移は問題ないものの、InfoVCとWebVCのセグエの遷移は2回目で実行時エラーとなってコケます。これの原因と対策をお願い致します。

swift3

1// 2// ViewController.swift 3// Map 4// 5 6import UIKit 7import MapKit 8import Foundation 9import CoreLocation 10 11class ViewController: UIViewController, MKMapViewDelegate, UIGestureRecognizerDelegate, CLLocationManagerDelegate{ 12 13 @IBAction func fromInfoSegue(_ segue:UIStoryboardSegue){} 14 15 var myMapView: MKMapView! 16 var locationManager: CLLocationManager! 17 18 var functionKey = 3 19 var isFunc = 3 20 var senderTag = 4 21 22 private var funcBtn: UIButton! 23 24 25 override func viewDidLoad() { 26 super.viewDidLoad() 27 // Do any additional setup after loading the view, typically from a nib. 28 setupLocationManager() 29 30 let maxWidth: CGFloat = self.view.bounds.width 31 let maxHeight: CGFloat = self.view.bounds.height 32 33 myMapView = MKMapView() 34 myMapView.frame = self.view.frame(forAlignmentRect: CGRect(x: 0.0, y: 20.0 + 50.0, width: maxWidth, height: maxHeight - 20.0 - 50.0 - 50.0)) 35 myMapView.delegate = self 36 myMapView.setCenter(myMapView.userLocation.coordinate, animated: true) 37 myMapView.setUserTrackingMode(.followWithHeading, animated: true) 38 myMapView.showsUserLocation = true 39 self.view.addSubview(myMapView) 40 41 funcBtn = UIButton() 42 funcBtn.frame = CGRect(x: maxWidth / 4.0 * 3.0, y: maxHeight - 50.0, width: maxWidth / 4.0, height: 50.0) 43 funcBtn.setTitleColor(UIColor.blue, for: .normal) 44 funcBtn.backgroundColor = UIColor.yellow 45 funcBtn.layer.cornerRadius = 20.0 46 funcBtn.setTitle("Info", for: .normal) 47 funcBtn.tag = 4 48 funcBtn.addTarget(self, action: #selector(ViewController.onClickMyButton(sender:)), for: .touchDown) 49 self.view.addSubview(funcBtn) 50 } 51 52 53 func setupLocationManager() { 54 locationManager = CLLocationManager() 55 guard let locationManager = locationManager else { return } 56 locationManager.requestWhenInUseAuthorization() 57 } 58 59 60 func onClickMyButton(sender: UIButton) { 61 senderTag = sender.tag 62 if (sender.tag == 4){ 63 myMapView.userTrackingMode = MKUserTrackingMode.none 64 self.performSegue(withIdentifier: "toInfoSegue", sender: nil) 65 } 66 } 67 68 override func didReceiveMemoryWarning() { 69 super.didReceiveMemoryWarning() 70 // Dispose of any resources that can be recreated. 71 } 72 73} 74 75 76 77extension ViewController { 78 79 func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { 80print("Pass") 81 switch status { 82 case .notDetermined: 83 print("ユーザーはこのアプリケーションに関してまだ選択を行っていません") 84 // 許可を求めるコードを記述する(後述) 85 locationManager.requestWhenInUseAuthorization() 86 break 87 88 case .denied: 89 print("ローケーションサービスの設定が「無効」になっています (ユーザーによって、明示的に拒否されています)") 90 // 「設定 > プライバシー > 位置情報サービス で、位置情報サービスの利用を許可して下さい」を表示する 91 let alert = UIAlertController(title: "ローケーションサービスの設定が「無効」になっています。", message: "「設定 > プライバシー > 位置情報サービス で、位置情報サービスの利用を許可して下さい」", preferredStyle: .alert) 92 alert.addAction(UIAlertAction(title: "OK", style: .default)) 93 self.present(alert, animated: true, completion: nil) 94 break 95 96 case .restricted: 97 print("このアプリケーションは位置情報サービスを使用できません(ユーザによって拒否されたわけではありません)") 98 // 「このアプリは、位置情報を取得できないために、正常に動作できません」を表示する 99 let alert = UIAlertController(title: "このアプリケーションは位置情報サービスを使用できません(ユーザによって拒否されたわけではありません)", message: "「このアプリは、位置情報を取得できないために、正常に動作できません」", preferredStyle: .alert) 100 alert.addAction(UIAlertAction(title: "OK", style: .default)) 101 self.present(alert, animated: true, completion: nil) 102 break 103 104 case .authorizedAlways: 105 print("常時、位置情報の取得が許可されています。") 106 // 位置情報取得の開始処理 107 break 108 case .authorizedWhenInUse: 109 print("起動時のみ、位置情報の取得が許可されています。") 110 // 位置情報取得の開始処理 111 locationManager.startUpdatingLocation() 112 break 113 } 114 } 115}

InfoVC

Swift

1// 2// InfoViewController.swift 3// Map 4// 5 6import UIKit 7 8class InfoViewController : UIViewController { 9 10 @IBAction func fromWebSegue(_ segue:UIStoryboardSegue){} 11 12 @IBAction func homePageButton(_ sender: UIButton) { 13 self.performSegue(withIdentifier: "toWebSegue", sender: nil) 14 } 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 } 19 20 override func didReceiveMemoryWarning() { 21 super.didReceiveMemoryWarning() 22 // Dispose of any resources that can be recreated. 23 } 24}

WebVC

Swift3

1// 2// WebViewController.swift 3// Map 4// 5 6import UIKit 7import WebKit 8 9class WebViewController: UIViewController, WKUIDelegate, WKNavigationDelegate { 10 11 let httpAddress : String = "https://www.google.co.jp/" 12 13 private var myWebView : WKWebView! 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 // Do any additional setup after loading the view, typically from a nib. 18 19 let maxWidth = self.view.frame.maxX 20 let maxHeight = self.view.frame.maxY 21 22 myWebView = WKWebView(frame: CGRect(x: 0, y: 70, width: maxWidth, height: maxHeight - 120 )) 23 myWebView.translatesAutoresizingMaskIntoConstraints = false 24 myWebView.isUserInteractionEnabled = true 25 myWebView.uiDelegate = self 26 myWebView.navigationDelegate = self 27 myWebView.allowsBackForwardNavigationGestures = true 28 self.view.addSubview(myWebView) 29 30 let url: NSURL = NSURL(string: httpAddress)! 31 let request: NSURLRequest = NSURLRequest(url: url as URL) 32 self.myWebView.load(request as URLRequest) 33 34 } 35 36 override func didReceiveMemoryWarning() { 37 super.didReceiveMemoryWarning() 38 } 39}

Segueのイメージ

長いソースになりましたが、これでも削除しました。大変申し訳ありませんが宜しくお願い致します。

エラー後の表示

class AppDelegate: UIResponder, UIApplicationDelegate { Thread1:EXC_BAT_ACCESS(code=1,address=0x3ed8a607)

実行エラーが発生する前は、

ERROR /BuildRoot/Library/Caches/com.apple.xbs/Sources/VectorKit/VectorKit-1230.34.9.30.27/GeoGL/GeoGL/GLCoreContext.cpp 1763: InfoLog SolidRibbonShader: ERROR /BuildRoot/Library/Caches/com.apple.xbs/Sources/VectorKit/VectorKit-1230.34.9.30.27/GeoGL/GeoGL/GLCoreContext.cpp 1764: WARNING: Output of vertex shader 'v_gradient' not read by fragment shader

というERRORが表示されるのですが、これがいけないのでしょうか?
毎回大変申し訳ありません。

btと打ち込んで出力されたログです。

(lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x408246e0) frame #0: 0x1bc4cdc6 libobjc.A.dylib`objc_msgSend + 6 frame #1: 0x21bde1d6 UIKit`-[UIView(Hierarchy) removeFromSuperview] + 188 frame #2: 0x24e4db36 WebKit`-[WKContentView(WKInteraction) cleanupInteraction] + 326 frame #3: 0x24e4a398 WebKit`-[WKContentView dealloc] + 24 frame #4: 0x1bc4e14e libobjc.A.dylib`_object_remove_assocations + 478 frame #5: 0x1bc496b4 libobjc.A.dylib`objc_destructInstance + 42 frame #6: 0x1bc496cc libobjc.A.dylib`object_dispose + 14 frame #7: 0x1f832146 QuartzCore`-[CALayer dealloc] + 114 frame #8: 0x1f830b9c QuartzCore`CA::Layer::free_transaction(CA::Transaction*) + 136 frame #9: 0x1f7e0058 QuartzCore`CA::Transaction::commit() + 704 frame #10: 0x1f7e0b2e QuartzCore`CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 162 frame #11: 0x1c973802 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20 frame #12: 0x1c971a54 CoreFoundation`__CFRunLoopDoObservers + 282 frame #13: 0x1c972016 CoreFoundation`__CFRunLoopRun + 1358 frame #14: 0x1c8c51ae CoreFoundation`CFRunLoopRunSpecific + 470 frame #15: 0x1c8c4fd0 CoreFoundation`CFRunLoopRunInMode + 104 frame #16: 0x1e06fb40 GraphicsServices`GSEventRunModal + 80 frame #17: 0x21c46e12 UIKit`UIApplicationMain + 150 * frame #18: 0x000e686c Map`main at AppDelegate.swift:12 frame #19: 0x1c0b24ea libdyld.dylib`start + 2 (lldb)

スクリーンショットの Window となっている部分を View に直したら、エラーが直りました。貴重なお時間をたくさん割いていただきありがとうございました。
Main.storyboard の Web View Controller Scene

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

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

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

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

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

fuzzball

2017/06/27 08:30

エラー内容を書いて下さい。
harima

2017/06/28 00:51

実行エラーが発生した時は (lldb) としか表示されません
fuzzball

2017/06/28 01:06

そこで bt と打ち込んで出力されるログを書いて下さい。あと、Exception Breakpointは追加しているでしょうか?
harima

2017/06/28 01:15

Execution Breakpointは追加していません。
fuzzball

2017/06/28 01:39

落ちるのはInfoVC→WebVCのときでしょうか?それとも戻るときでしょうか?
harima

2017/06/28 01:54

落ちるのは 戻る時の WebVC → infoVC の戻った後です。
fuzzball

2017/06/28 01:59

Storyboard上でWebViewControllerに乗せているのは戻るボタンだけでしょうか?
harima

2017/06/28 02:06

現在は、戻るボタンだけです。実際はバナーも乗せていますが今は外しています。Web View Controller Scene でおかしいところがありました。普通はView のところが Window になっています。これが原因でしょうか?
fuzzball

2017/06/28 02:16

状況が分からないので何とも‥。名前が変わっているだけではないのでしょうか?
fuzzball

2017/06/28 02:35

自分で回答を書いてcloseして下さい。
harima

2017/06/28 02:36

長い間お世話になりありがとうございました
guest

回答1

0

自己解決

Web View Controller Scene

Window を View に変更したら、直りました。

投稿2017/06/28 02:40

harima

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問