2016-10-17 7 views
0

内のインスタンスに送信された私は2つの画面があり、非常に単純なアプリケーションを構築し始めました。最初の2つのUIボタンがあります。 1つのボタンは、最初のView Controller(ViewController.swift)の下のコードを使用してランダムなサウンドを再生し、もう1つのボタンはモーダルに第2の画面を表示します。UIButton認識されていないセレクタが新しいのViewController

2番目の画面上に2つのUIbuttons 1最初の画面に戻り、別のランダムな音と他のを再生するためにもあります。最初の画面上のランダムな音を再生する

は完璧に動作します。私はブランドの新しいのViewControllerを作成している第2のスクリーンのために

はPageOneViewController.swiftと呼ばれ、クラスがIBに正しく割り当てられていることを確認しました。この第2のビューコントローラは、競合および混乱を避けるために名前の変更を除いて、第2ページのコードのカーボンコピークローンを含む。しかし、この2番目のページでサウンドを再生しようとすると、認識できないセレクタエラーが発生し、その理由がわかりません。

次のようにエラーメッセージは次のとおりです。

2016-10-17 18:04:57.749 NewApp[28750:2719569] *** Terminating app  due to uncaught exception 'NSInvalidArgumentException', reason: '- [NewApp.PageOneViewController buttonPressed2WithSender:]: unrecognized  selector sent to instance 0x7fe79070b8a0' 

そして、この行(私は多くの助けではありません実現している)上で停止:私は経由で手動ボタンを接続してい

class AppDelegate: UIResponder, UIApplicationDelegate { 

「タッチアップインサイド」をタッチメソッドとして使用することができます。

私はこれをまったく頭に入れることはできません。古き良きObjective-C時代に、私はこの問題に遭遇しました。 ctlyまたはサウンドファイルの1つがバンドルから抜けていましたが、何度も何度も何度もチェックしたことがあり、何が起こっているのか分かりません。

ViewController.swiftのためのコード:PageOneViewController.swiftため

import AVFoundation 
import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var mainButton1: UIButton! 

    var arrayOfSounds = ["1", "2", "3", "4", "5", "6", "7", "8", "9",  "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21",  "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33",  "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", 
         "45", "46", "47", "48", "49", "50", "51" ,  "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63",  "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75",  "76", "77", "78", "79", "80", "81", "82"] 
    var audioPlayer : AVAudioPlayer? 

    func setupAudioPlayer(file: NSString, type: NSString){ 
     let path = NSBundle.mainBundle().pathForResource(file as  String, ofType: type as String) 
     let url = NSURL.fileURLWithPath(path!) 
     do { 
      try audioPlayer = AVAudioPlayer(contentsOfURL: url) 
     } catch { 
      print("Player not available") 
     } 
    } 

    @IBAction func buttonPressed(sender: AnyObject){ 
      let range: UInt32 = UInt32(arrayOfSounds.count) 
      let number = Int(arc4random_uniform(range)) 

    self.setupAudioPlayer(arrayOfSounds[number], type: "wav") 
    self.audioPlayer?.play() 




} 
} 

コード:起こっている可能性が何

import AVFoundation 
import UIKit 

class PageOneViewController: UIViewController { 

    @IBOutlet weak var mainButtonNew: UIButton! 

    var arrayOfSounds = ["1", "2", "3", "4", "5", "6", "7", "8", "9",  "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21",  "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33",  "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", 
         "45", "46", "47", "48", "49", "50", "51" ,  "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63",  "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75",  "76", "77", "78", "79", "80", "81", "82"] 
    var audioPlayer : AVAudioPlayer? 

    func setupAudioPlayer(file: NSString, type: NSString){ 
     let path = NSBundle.mainBundle().pathForResource(file as  String, ofType: type as String) 
     let url = NSURL.fileURLWithPath(path!) 
     do { 
      try audioPlayer = AVAudioPlayer(contentsOfURL: url) 
     } catch { 
      print("Player not available") 
     } 
    } 

    @IBAction func buttonPressedNew(sender: AnyObject){ 
      let range: UInt32 = UInt32(arrayOfSounds.count) 
      let number = Int(arc4random_uniform(range)) 

    self.setupAudioPlayer(arrayOfSounds[number], type: "wav") 
    self.audioPlayer?.play() 




} 
} 
+0

ダブルチェックすべてがインターフェイスビルダーでリンクされています。 – ohr

+0

完全で正確なエラーメッセージで質問を更新し、エラーの原因となっている正確な行を指摘してください。 – rmaddy

+0

オーディオファイルを再生する前に、player.prepareToPlayを実行する必要があります。また、オプションのバインドを使用する代わりに、コード内の変数を強制的にアンラップします。 – Dasem

答えて

1

まあ、私はまだこの問題の原因となった正確に何を知らないが、それを修正するために必死の試みは、2.3からスウィフト3へのアップデート私が生じ、すぐに問題を修正しました。

0

はストーリーボード何かである2 IBOutletsを参照して、ボタンのような二重の参照を持っているか、も2つのIBActionsに参照を削除するのを忘れている可能性があります。接続インスペクタで接続を確認するか、Ctrlキーを押しながらCtrlキーを押します。 print文をコードやブレークポイントに配置して、クラッシュする箇所を正確に確認しようとしましたか?

+0

私は何度も切断して再接続して、すべてが正しいことを確認しました。再:ブレークポイント。私は両方のViewControllerのすべての行でブレークを設定することを余儀なくされています。奇妙なのは、そのボタンを押してもViewControllerのどこかでブレークが発生しないということです。それはまっすぐに例外に行く。 – PocketTim

+0

は、2番目のView Controllerで再度アクセスする前に、最初のAudioPlayerへの接続を閉じる必要がありますか? –

関連する問題