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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

iPhone

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

Q&A

解決済

1回答

8954閲覧

Swift3.0でAppDelegateにアクセスするオブジェクトを作りたいです。

Kochan

総合スコア56

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

iPhone

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

0グッド

0クリップ

投稿2016/10/09 10:24

###前提・実現したいこと
Swift3.0でAppDelegateにアクセスするオブジェクトを作りたいです。

使っている教科書がswift2.0のものでして、
調べて書き換えたのですが、エラーが出てしまいます。

どうか、分かる方、よろしくお願いします。
###発生している問題・エラーメッセージ

xCode8.0にて、 ビルドは成功するがシミュレーターが真っ白で、 llbdのエラーで止まる。 let ap = UIApplication.shared.delegate as! AppDelegate ここにbreak pointがある。

###該当のソースコード

Swift3.0

1 2import UIKit 3 4class FirstViewController: UIViewController { 5 6 @IBOutlet weak var dataTextField: UITextField! 7 8 9 let ap = UIApplication.shared.delegate as! AppDelegate 10 11 12 13 override func viewWillAppear(_ animated: Bool) { 14 dataTextField.text = String(ap.cmValue) 15 } 16 17 18 @IBAction func tapInpu() { 19 20 dataTextField.resignFirstResponder() 21 if let text = dataTextField.text{ 22 23 if let cmValue = Double(text){ 24 ap.cmValue = cmValue 25 } 26 } 27 } 28 29 override func viewDidLoad() { 30 super.viewDidLoad() 31 // Do any additional setup after loading the view, typically from a nib. 32 } 33 34 override func didReceiveMemoryWarning() { 35 super.didReceiveMemoryWarning() 36 // Dispose of any resources that can be recreated. 37 } 38 39 40}

###試したこと
http://stackoverflow.com/questions/24046164/how-do-i-get-a-reference-to-the-app-delegate-in-swift

上記のページを参考に、

UIApplication.sharedApplication().delegate as! AppDelegate

UIApplication.shared.delegate as! AppDelegate
に書き換えました。

これによりビルドは成功するようになったのですが、
Runするとここがbreak pointになって止まってしまいます。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のコードでAppDelegateから値を取得して問題無く起動しました、特に問題は無いと思いますので、もう一度一から作ったプロジェクトにコピペして試してみてください。
※ コンソールにエラーがある場合はそちらも載せてください。

swift

1// ----- AppDelegate ----- 2 3import UIKit 4 5@UIApplicationMain 6class AppDelegate: UIResponder, UIApplicationDelegate { 7 8 var window: UIWindow? 9 var cmValue: Double = 0 10 11 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 12 13 return true 14 } 15} 16 17// ----- FirstViewController ----- 18 19import UIKit 20 21class FirstViewController: UIViewController { 22 23 @IBOutlet weak var dataTextField: UITextField! 24 let ap = UIApplication.shared.delegate as! AppDelegate 25 26 override func viewWillAppear(_ animated: Bool) { 27 dataTextField.text = String(ap.cmValue) 28 } 29 30 @IBAction func tapInpu() { 31 32 dataTextField.resignFirstResponder() 33 if let text = dataTextField.text{ 34 35 if let cmValue = Double(text){ 36 ap.cmValue = cmValue 37 } 38 } 39 } 40}

投稿2016/10/09 10:39

_Kentarou

総合スコア8490

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

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

Kochan

2016/10/09 11:51

ありがとうございます! 新規プロジェクトにコピペしてみたところ、動いたのですが シミュレーターでbuttonを押すとエラーが出て止まってしまいました。 エラーコードはこちらになります。 この原因はわかりますでしょうか。 調べたのですがよくわかりませんでした。 *** First throw call stack: ( 0 CoreFoundation 0x00000001040b834b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x00000001017d221e objc_exception_throw + 48 2 CoreFoundation 0x0000000104127f34 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 3 CoreFoundation 0x000000010403dc15 ___forwarding___ + 1013 4 CoreFoundation 0x000000010403d798 _CF_forwarding_prep_0 + 120 5 UIKit 0x0000000101c9cb88 -[UIApplication sendAction:to:from:forEvent:] + 83 6 UIKit 0x0000000101e222b2 -[UIControl sendAction:to:forEvent:] + 67 7 UIKit 0x0000000101e225cb -[UIControl _sendActionsForEvents:withEvent:] + 444 8 UIKit 0x0000000101e214c7 -[UIControl touchesEnded:withEvent:] + 668 9 UIKit 0x0000000101d0a0d5 -[UIWindow _sendTouchesForEvent:] + 2747 10 UIKit 0x0000000101d0b7c3 -[UIWindow sendEvent:] + 4011 11 UIKit 0x0000000101cb8a33 -[UIApplication sendEvent:] + 371 12 UIKit 0x00000001024aab6d __dispatchPreprocessedEventFromEventQueue + 3248 13 UIKit 0x00000001024a3817 __handleEventQueue + 4879 14 CoreFoundation 0x000000010405d311 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 15 CoreFoundation 0x000000010404259c __CFRunLoopDoSources0 + 556 16 CoreFoundation 0x0000000104041a86 __CFRunLoopRun + 918 17 CoreFoundation 0x0000000104041494 CFRunLoopRunSpecific + 420 18 GraphicsServices 0x0000000105f4ba6f GSEventRunModal + 161 19 UIKit 0x0000000101c9af34 UIApplicationMain + 159 20 convertUnit2 0x0000000100e7bf7f main + 111 21 libdyld.dylib 0x000000010120168d start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)
Kochan

2016/10/09 12:28

もう一度、最初からやり直したところ、 うまくいきました!! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問