2016-07-06 3 views
1

私はアプリを起動しているときに正常に動作します。ランダムボタンをクリックすると、スレッド1:EXC_BAD_INSTRUCTIONSfinalLABEL.text = strになります。 致命的なエラー:スレッド1:EXC_BAD_INSTRUCTIONS | SWIFT

@IBOutlet var fromACT: UITextField! 
@IBOutlet var toEXT: UITextField! 
@IBOutlet var finalLABEL: UILabel! 
func unsafeRandomIntFrom(start: Int32, to end: Int32) -> Int32 { 
    let number = Int32(arc4random_uniform(UInt32(end - start + 1))) + start 
    return number 
} 

@IBAction func random(sender: AnyObject) { 
    let convertedNumber = NSString(string: fromACT.text!).intValue 
    let convertedNumber2 = NSString(string: toEXT.text!).intValue 
    let randomSV = unsafeRandomIntFrom(convertedNumber, to: convertedNumber2) 
    let str = String(randomSV) 

    finalLABEL.text? = str 
} 
+1

最後の行の構文が間違っています。 'finalLabel?.text = str'とか、' finalLabel.text = str'だけです。 –

+0

@David finalLabel.text = strに修正しましたが、同じ問題が残っています –

+0

あなたのunsafeRandomIntFromにブレークポイントを追加し、ランダム関数に別のブレークポイントを追加します。一歩一歩進んで失敗する場所を教えてください – H4Hugo

答えて

0

オプションの値をアンラップしながら、予想外にnilを見つけ、あなたのコードを保護するようにしてください:

... 
let convertedNumber = NSString(string: fromACT.text!).intValue 
let convertedNumber2 = NSString(string: toEXT.text!).intValue 
let randomSV = unsafeRandomIntFrom(convertedNumber, to: convertedNumber2) 
if Int(randomSV) != nil { 
    let str = String(randomSV) 
    finalLABEL.text? = str 
} 

あなたの関数にもデフォルト値を設定できます。

func unsafeRandomIntFrom(start: Int32 = 3, to end: Int32 = 6) -> Int32 { 
    let number = Int32(arc4random_uniform(UInt32(end - start + 1))) + start 
    return number 
} 

デフォルトの値を持つように、値を指定せずに関数を呼び出すときに常に確保する。

+0

私は保護装置を使用しました。まだエラーが表示されます。それを意味し、それは** STR **致命的なエラー空ではありませんが、**:オプションの値をアンラップしながら、予想外にnilを見つけ**まだすべての –

+0

ファーストを示しているが、今何が起こったのか、スタックオーバーフローを歓迎しますか? –

+0

あれば聞かせて、R = randomSV {**オプションの種類を持っている必要があります結合条件付きの初期化子、IN32ない** –

関連する問題