2009-12-07 36 views
9

Gần đây tôi đã chạy vào một vấn đề mà tôi không thể tìm thấy bất cứ nơi nào thảo luận trên internet - Tôi đã khởi tạo một AVAudioPlayer để đóng một tập tin âm thanh, và nhận được lỗi sau:AVAudioPlayer khởi: mã lỗi -50

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

Khi hóa ra, tôi đã nhầm lẫn khi tạo NSURL để gửi cho trình phát âm thanh init, dẫn đến đối tượng NSURL bị vô hiệu. Sai lầm ngu ngốc, khá dễ tìm khi gỡ lỗi, nhưng tôi nghĩ tôi sẽ liệt kê nó ở đây chỉ trong trường hợp người khác làm điều tương tự.

+3

Và đối với bất kỳ ai khác tự hỏi tại sao đối tượng NSURL của họ là rỗng, nếu bạn đang tạo NSURL như thế này và tên tệp của bạn có dấu cách, bạn cần phải mã hóa phần trăm: 'NSString * path = [[ NSBundle mainBundle] pathForResource: @ "tệp có dấu cách.mp3" ofType: @ ""]; NSString * path = [path stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSURL * url = [URL NSURLVới đường dẫn: đường dẫn]; ' – Brynjar

+0

nhận xét tuyệt vời chỉ ra vấn đề với không gian trong tên tệp! lời cảm ơn to lớn! – codepushr

+1

Một nguồn có thể cho lỗi này là cố gắng sử dụng tùy chọn AVAudioSessionCategoryOptions.defaultToSpeaker cùng với AVAudioSessionCategoryPlayback. Điều đó không có tác dụng, bạn cần sử dụng AVAudioSessionCategoryPlayAndRecord - hoặc thả tùy chọn defaultToSpeaker. – RenniePet

Trả lời

6

“Lỗi OSStatus -50” có nghĩa là paramErr, mã lỗi Mac kiểu cũ cho biết thông số không hợp lệ.

1

Đảm bảo NSURL của bạn hợp lệ hoặc bạn sẽ nhận được mã lỗi -50 "Không thể hoàn tất thao tác".

+0

làm cách nào để đảm bảo NSURL của tôi hợp lệ? Đường dẫn là chính xác và hoạt động trên iPad, nhưng khi tôi chạy nó trong trình mô phỏng nó không thể tìm thấy tệp ... :( – jowie

7

Về nhận xét từ Brynjar: Apple NSURL Lớp tham khảo mô tả URLWithString khẳng định

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

Tôi đã tìm thấy rằng việc sử dụng URLWithString cho đường dẫn hệ thống tập tin tạo ra lỗi báo cáo của pix0r và do đó có thể là một lời giải thích cho lỗi Mã số = -50