2017-11-28 17 views
-4

私はデバッグを理解しようとすると新しいです、私は挑戦しています。 私はこの問題の解決策について質問しており、StackOverflow内でそれを見つけられませんでした。私はここで何が起きているのか、なぜこのクラッシュが起こったのかをよりよく理解するために結びついています。Swiftのオプションのクラッシュを解く

ソースコードのprint文でバグを追跡しました。私はブロックに到達していることを確認するために、この関数の先頭にprintステートメントを追加しました。

@IBAction func bugTypeSelected(_ sender: UIButton) { 
    print("bugTypeSelected reached") 
    bugFactory.currentBugType = BugFactory.BugType(rawValue: Int(sender.currentTitle!)!)! 
    self.dismiss(animated: true, completion: nil) 
} 

私はアプリを実行し、モーダル設定のバグのいずれかをクリックすると、print文は、コンソール、その後、アプリのクラッシュに印刷されます。 Xcodeは、問題は、このライン内にあることを私に語っている:エラーがそう

“Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value.”

を読み込み

bugFactory.currentBugType = BugFactory.BugType(rawValue: Int(sender.currentTitle!)!)! 

、私がnilの値を使用すると、アプリがクラッシュすることを理解しています。私はまた、私がここでオプショナルズと一緒に働いていることを理解しています。私は次に何をすべきかに固執しています。

+2

のに役立ちます。値をラップ解除できない場合は、 'guard let'または' if let'を使用してエラー出力を追加してください。この方法でエラーを見つけることができます。 – dasdom

+1

@dasdom *あなたは! Swift *のオペレータは白黒すぎます。強制的なアンラッピングが絶対に安全で、デザインエラーを明らかにするグレー*(ケース)の*レベルが多数あります。しかし、あなたは**この**特別なケースで正しいです。 – vadian

+0

@vadian私の意見では、最初にSwiftに追加されてはいけません。しかし、ObjCのために追加する必要がありました。 – dasdom

答えて

0

その行の問題点は、カーストに強制値nilかどうかのデータ型はアプリが

以下のようにunwarp使用オプションunwarpへの力の代わりに

をクラッシュすることを意味している場合、あなたがunwarp値に力あるあります

if sender.currentTitle != nil { 
    if let requiredIntValue = Int(sender.currentTitle!){ 
    if let bugType = BugFactory.BugType(rawValue: requiredIntValue)?{ 
     bugFactory.currentBugType = bugType 
    } 
    } 
} 

・ホープこれはあなたがスウィフトで `!`演算子を使用しないでください、あなた

+0

Ganeshありがとうございます。私はあなたがオプションをアンラップしているところを見ますが、最初の2行は分かりません。また、2行目と3行目にエラーが発生します。エラーは両方の行で同じです。 未解決の識別子 'requiredIntValue'の使用 何が欠けていますか? –

+0

答えが一回確認してください –

+0

それは動作します、ありがとうございます。私はここでオプションの連鎖の使用をよく理解していません。 –

関連する問題