2009-12-07 11 views
9

ich vor kurzem in ein Problem lief, dass ich nicht überall im Internet diskutiert finden konnte - ich war Initialisierung ein AVAudioPlayer eine Audiodatei zu spielen, und immer folgende Fehlermeldung:AVAudioPlayer Initialisierung: Fehlercode -50

Error Domain=NSOSStatusErrorDomain Code=-50 "Operation could not be completed. (OSStatus error -50.) 

Wie sich herausstellte, hatte ich einen Fehler bei der Erstellung meines NSURL gemacht, um es an den Audioplayer init zu senden, was dazu führte, dass das NSURL Objekt null war. Dummer Fehler, ziemlich leicht zu finden beim Debuggen, aber ich dachte, ich würde es hier auflisten, falls jemand anderes das Gleiche macht.

+3

Und für alle anderen, die sich fragen, warum ihr NSURL-Objekt null ist, wenn Sie Ihre NSURL wie folgt erstellen und Ihr Dateiname Leerzeichen enthält, müssen Sie in Prozent codieren: 'NSString * path = [[ NSBundle mainBundle] pathForResource: @ "file with spaces.mp3" ofType: @ ""]; NSString * path = [Pfad stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSURL * url = [NSURL URLWithString: Pfad]; ' – Brynjar

+0

great Kommentar, der das Problem mit Leerzeichen im Dateinamen hervorhebt! vielen Dank! – codepushr

+1

Eine mögliche Quelle für diesen Fehler ist die Verwendung der Option AVAudioSessionCategoryOptions.defaultToSpeaker zusammen mit AVAudioSessionCategoryPlayback. Das funktioniert nicht, Sie müssen AVAudioSessionCategoryPlayAndRecord verwenden - oder die defaultToSpeaker-Option löschen. – RenniePet

Antwort

6

"OSStatus Fehler -50" bedeutet paramErr, ein Mac-Fehlercode alten Stils, der einen fehlerhaften Parameter anzeigt.

1

Stellen Sie sicher, dass NSURL gültig ist, oder Sie erhalten den Fehlercode -50 "Operation konnte nicht abgeschlossen werden".

+0

Wie stelle ich sicher, dass mein NSURL gültig ist? Der Pfad ist korrekt und funktioniert auf dem iPad, aber wenn ich ihn im Simulator starte, kann er die Datei nicht finden ... :( – jowie

7

In Bezug auf den Kommentar von Brynjar: Der Apple NSURL Klassenreferenz beschreibt URLWithString heißt

To create NSURL objects for file system paths, use fileURLWithPath:isDirectory: instead.

ich, dass mit URLWithString für Dateisystempfade den Fehler durch pix0r berichtet erzeugt und damit für Fehler noch eine andere Erklärung könnte gefunden werden code = -50