OSStatus error 2003334207 when using AVAudioPlayer
Solution 1
It looks like your trying to unwrap a variable that has a nil value. You should safely unwrap your variables to prevent this.
if let data: CDEpisode = fetchedResultsController.objectAtIndexPath(indexPath!) as! CDEpisode
{
var err: NSError?
let url = NSURL(string: data.localPath)
println("The url is \(url)")
//rest of code
}
You will still need to figure out why it is returning nil but this is a safer way to unwrap variables and prevent crashing as there would need to be more context to resolve that issue.
Some questions to look into:
- Are you sure the fetchedResultsController is returning an object at all?
- Are you sure it is of CDEpisode?
Solution 2
This is probably caused by trying to load a file that doesn't exist. If that helps someone adding the call to url.checkResourceIsReachable()
will log more descriptive message.
Example code:
do {
let url = URL(fileURLWithPath: dbObject.path)
let isReachable = try url.checkResourceIsReachable()
// ... you can set breaking points after that line, and if you stopped at them it means file exist.
} catch let e {
print("couldnt load file \(e.localizedDescription)")
}
Solution 3
try this one
var player: AVAudioPlayer = AVAudioPlayer()
@IBAction func playX(_ sender: Any) {
let urlstring = "https://file-examples-com.github.io/uploads/2017/11/file_example_MP3_700KB.mp3"
let url = URL(string: urlstring)
let data = try! Data(contentsOf: url!)
player = try! AVAudioPlayer(data: data)
player.prepareToPlay()
player.volume = 1.0
player.play()
}
Solution 4
You're checking if audioPlayer
is nil
but then you go on to use it as if it wasn't anyway. You probably want something like:
if audioPlayer == nil {
if let e = err {
println(e.localizedDescription)
}
} else {
audioPlayer.delegate = self
audioPlayer.prepareToPlay()
audioPlayer.play()
}
And do something to actually handle the error case rather than just printing the error.
Related videos on Youtube
user2747220
Updated on June 18, 2022Comments
-
user2747220 almost 2 years
I am trying to play an MP3 file (works when played via VLC/iTunes) when a button is pressed. Here is my code:
var audioPlayer: AVAudioPlayer! @IBAction func playEpisode(sender: AnyObject) { println("now playing") let indexPath = NSIndexPath(forRow: sender.tag, inSection: 0) let data: CDEpisode = fetchedResultsController.objectAtIndexPath(indexPath!) as! CDEpisode var err: NSError? let url = NSURL(string: data.localPath) println("The url is \(url)") audioPlayer = AVAudioPlayer(contentsOfURL: url, error: &err) if audioPlayer == nil { if let e = err { println(e.localizedDescription) } } audioPlayer.delegate = self audioPlayer.prepareToPlay() audioPlayer.play() }
Here is the log:
now playing The url is Optional(file:///var/mobile/Containers/Data/Application/4747A71E-A63F-4EFC-B2DF-8B361361080B/Documents/serial-s01-e12.mp3) The operation couldn’t be completed. (OSStatus error 2003334207.) fatal error: unexpectedly found nil while unwrapping an Optional value
The
EXC_BREAKPOINT
happens on theaudioPlayer.delegate = self
.Other threads on StackoOverflow do not help. Any ideas? Thanks
Edit: I have tried passing a localURL to contentsOfURL (instead of a CDEpisode object) and it still fails.
-
user2747220 about 9 yearsYou're absolutely correct. This is just makeshift code and not final. I've added an else statement and it doesn't crash the app anymore but it still throws the same error.
-
user2747220 about 9 yearsThanks, you are right. The app still throws the same error. the fetchedResultsController returns the right object of type CDEpisode.
-
user2747220 about 9 yearsThere was a mistake in my CoreData database. This is now fixed. Thanks to you and @dan