2016-05-03 8 views
1

私はすぐに理解したものは何も提供していないようです。swift-get UIResponderエラーで使用している配列配列の項目を呼び出す

私は、 'DOSのような'ステートメントを印刷するアプリのための愚かな '古いスキール'読み込み画面を作ろうとしています。

私の現在のコードは次のように見えますが、私はUIResponder、UIApplicationDelegateのエラーを取得する - EXE_BAD_ACCESS

私はまだ同じエラーを取得し、新たなプロジェクトなどにこれをコピーしようとしました。以下

コード:

class ViewController: UIViewController { 

    @IBOutlet weak var loadingLBL: UILabel! 

    @IBOutlet weak var logoIMG: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     //fades logo image in 
     logoIMG.alpha = 0 
     UIView.animateWithDuration(5, animations: { 
      self.logoIMG.alpha = 1; 
     }) 

     //array for loading text 

     var loading = ["Loading please wait.......\n", "Registry , OK!\n", `"Available ram, 256k\n", "BIOS Load... OK\n", "Welcome" ]` 

     var i = 0 
     var str: String = "" 
     var timer = NSTimer() 

     //delay function for loading array text 

     func delayFunc() { 
      str += "\(loading[i])\n" 
      loadingLBL.text = str 
      if i == loading.count - 1 { 
       timer.invalidate() 
      } 
      i += 1 
     } 

     timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector(delayFunc()), userInfo: nil, repeats: true) 
    } 

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

私が述べたように、私はクラッシュを取得し、私は私が間違って何をやったかさっぱりだが。

ご協力いただければ幸いです。

+2

クラッシュをデバッグする方法を学ぶために、あなたの後http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1 – rmaddy

+1

をご覧ください。デバッグ方法を学び、完全なエラーメッセージや実際にエラーが発生する行など、クラッシュに関する具体的な詳細を質問に反映させます。 – rmaddy

+1

何をした後@rmaddyがお勧めします。まず、あなたのdelayFuncと共にviewDidLoadから**タイマー**、** i **、&** str **変数を削除することから始めます。これらはすべてクラスレベルにある必要があります。また、タイマーのセレクタパラメータは#selector(ViewController.delayFunc)にする必要があります。 –

答えて

0

私はセレクタがViewControllerをで見ているが、

編集(それはのviewDidLoadであるため)機能を見つけることができない、あなたの問題はdelayFuncは()のviewDidLoadであるということだと思う:私は100%ではなかったですセレクタがviewDidLoadにあるときにdelayFuncが見つからない理由を明確にしてください。別の関数の本体の中で関数を宣言した場合、その関数の寿命はたいていその '親'関数の存続期間です。したがって、あなたのタイマーがdelayFuncを呼び出そうとすると、viewDidLoadの実行が終了したため、delayFuncはもう存在しません。

試してみてください。

var i = 0 
var str: String = "" 
var timer = NSTimer() 

var loading = ["Loading please wait.......\n", "Registry , OK!\n", "Available ram, 256k\n", "BIOS Load... OK\n", "Welcome" ] 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    //fades logo image in 
    logoIMG.alpha = 0 
    UIView.animateWithDuration(5, animations: { 
     self.logoIMG.alpha = 1; 
    }) 

    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "delayFunc", userInfo: nil, repeats: true) 
} 

func delayFunc() { 
    str += "\(loading[i])\n" 
    loadingLBL.text = str 
    if i == loading.count - 1 { 
     timer.invalidate() 
    } 
    i += 1 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
関連する問題