2017-10-02 1 views
0

저는 스위프트에서 새삼입니다. 이 코드를 실행하려고하지만 오류가 발생했습니다 오전 :스레드 1 : EXC_BAD_ACCESS (코드 = 1, 주소 = 0X48)

Thread 1: EXC_BAD_ACCESS (code=1, address=0x48) a.

오류가 여기에 나타납니다 :이 문제에

self.player.play()

수있는 사람의 도움을?

 
import UIKit 
import AVFoundation

class ViewController: UIViewController {

var player = AVAudioPlayer() override func viewDidLoad() { super.viewDidLoad() do { if let audioPath = Bundle.main.path(forResource: "music", ofType: "mp3") { try player = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audioPath)) } } catch { print("ERROR") } self.player.play() }
+0

내 생각은 '시도'audiopath'하자 또는 player'는'player.play()'휴식 성공적인 왔으며하지 않았습니다. 올바른 폴더에 music.mp3이 있습니까? 이 오류는 AVAudioPlayer가 재생할 것이 없을 때 발생할 수 있습니다. –

+0

안녕하세요. 진실처럼 보입니다. guard는 audioPath = Bundle.main을 사용합니다.경로 (forResource : "music", ofType : "mp3") else { print ("Error 1") return } 은 1을 반환합니다. 이제 올바른 경로를 찾으려고합니다. –

답변

1

당신이 당신의 코드와 함께 일을하는 것입니다 :

  1. music.mp3에서 일부 데이터를 새 인스턴스를 만들려고없이 AVAudioPlayer 의 인스턴스를 생성 데이터
  2. 파일
  3. 재생 중

audioPath이 올바르지 않으면 플레이어가 올바르게 생성되지 않습니다. 응용 프로그램에서 유효한 데이터없이 사용하면 재생 중 충돌이 발생할 수 있습니다.

귀하의 코드는 충돌 방지있게됐다 플레이어 optional 만들기 쓸 수

: 지금 선택

  • player됩니다 : 코드에 수행

    import UIKit 
    import AVFoundation 
    
    class ViewController: UIViewController { 
    
        var player: AVAudioPlayer? 
    
        override func viewDidLoad() { 
         super.viewDidLoad() 
    
         player = initializePlayer() 
         player?.play() 
        } 
    
        private func initializePlayer() -> AVAudioPlayer? { 
         guard let path = Bundle.main.path(forResource: "music", ofType: "mp3") else { 
          return nil 
         } 
    
         return try? AVAudioPlayer(contentsOf: URL(fileURLWithPath: path)) 
        } 
    } 
    

    일부 변경을 어떤 존재를 그것을 두 번 초기화해야합니다. 게다가 초기화가 잘되면 문제없이 사용할 수 있습니다. 그렇지 않으면 앱이 다운되지 않습니다.

  • play 방법은 코드를 읽을 유지하기 위해, (임의)
  • 내가 별도의 개인 방법으로 플레이어의 초기화를 이동 한 지금이다. 그것을 바꾸는 것은 자유롭게, 그것은 단지 제안 일뿐입니다.
+1

감사합니다. 이 코드는 가장 안전합니다. –

0

나는 그것을 얻었습니다. 문제는 파일이 내 앱 번들과 충돌하지 않는다는 것입니다. 이 문제를 해결하려면 :

  1. 가 복사 번들 리소스를 확장
  2. 클릭 '+'와 파일을 선택 페이즈 빌드 대상
  3. 선택을 클릭하여 프로젝트
  4. 을 클릭합니다.

감사 Denis Hennessy

관련 문제