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

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

ただいまの
回答率

90.49%

  • Swift

    8908questions

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

  • iOS

    4760questions

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

  • iPhone

    1129questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 6,325

Kochan

score 38

前提・実現したいこと

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

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

どうか、分かる方、よろしくお願いします。

発生している問題・エラーメッセージ

xCode8.0にて、
ビルドは成功するがシミュレーターが真っ白で、
llbdのエラーで止まる。

let ap = UIApplication.shared.delegate as! AppDelegate

ここにbreak pointがある。

該当のソースコード

import UIKit

class FirstViewController: UIViewController {

    @IBOutlet weak var dataTextField: UITextField!


    let ap = UIApplication.shared.delegate as! AppDelegate



    override func viewWillAppear(_ animated: Bool) {
        dataTextField.text = String(ap.cmValue)
    }


    @IBAction func tapInpu() {

        dataTextField.resignFirstResponder()
        if let text = dataTextField.text{

            if let cmValue = Double(text){
            ap.cmValue = cmValue
            }
        }
    }

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

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


}

試したこと

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/ツール等のバージョンなど)

より詳細な情報

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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

// ----- AppDelegate -----

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var cmValue: Double = 0

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        return true
    }
}

// ----- FirstViewController -----

import UIKit

class FirstViewController: UIViewController {

    @IBOutlet weak var dataTextField: UITextField!
    let ap = UIApplication.shared.delegate as! AppDelegate

    override func viewWillAppear(_ animated: Bool) {
        dataTextField.text = String(ap.cmValue)
    }

    @IBAction func tapInpu() {

        dataTextField.resignFirstResponder()
        if let text = dataTextField.text{

            if let cmValue = Double(text){
                ap.cmValue = cmValue
            }
        }
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/09 20: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)

    キャンセル

  • 2016/10/09 21:28

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

    ありがとうございました!

    キャンセル

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

  • Swift

    8908questions

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

  • iOS

    4760questions

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

  • iPhone

    1129questions

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