2010-01-21 9 views
7

Có một vấn đề nhận được URL cho một nguồn tài nguyên đối với một số lý do: Mã này là trong viewDidLoad, và nó đã làm việc trong các ứng dụng khác, nhưng không phải ở đây vì một lý do:lợi nhuận URLWithString Nil cho đường nguồn - iphone

NSString* audioString = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"]; 
NSLog(@"AUDIO STRING: %@" , audioString); 

NSURL* audioURL = [NSURL URLWithString:audioString]; 
NSLog(@"AUDIO URL: %d" , audioURL); 

NSError* playererror; 
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&playererror]; 
[audioPlayer prepareToPlay];  

NSLog(@"Error %@", playererror); 

LOG OUTPUT:

AUDIO STRING: /var/mobile/Applications/D9FA0569-45FF-4287-8448-7EA21E92EADC/SoundApp.app/sound.wav

AUDIO URL: 0

Lỗi lỗi miền = NSOSStatusErrorDomain Code = -50 "Thao tác không thể hoàn thành. (OSStatus lỗi -50.)"

Trả lời

22

chuỗi của bạn không có giao thức, vì vậy nó là một hợp lệ url. Hãy thử điều này ...

NSString* expandedPath = [audioString stringByExpandingTildeInPath]; 
NSURL* audioUrl = [NSURL fileURLWithPath:expandedPath]; 
+0

xin lỗi, tôi viết tắt mục nhập nhật ký, nhưng chuỗi là một đường dẫn hợp lệ và sử dụng đường dẫn mở rộng không tạo sự khác biệt – Adam

+1

xin lỗi lần nữa, tôi nên đọc kỹ hơn. Thay đổi thành fileURLWithPath đã khắc phục được sự cố. Cảm ơn! – Adam

4

Bạn đang đi qua audioURL trong phương pháp NSLog của bạn như %d do vậy tại sao bạn nhận được 0. Nếu bạn vượt qua nó như là một đối tượng với %@ bạn sẽ nhận được NULL.

Hãy thử qua vào Audioplayer như thế này và bỏ qua chuỗi.

NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"]]; 
+0

cuộc gọi ban đầu của tôi là [[Phân bổ AVAudioPlayer] initWithContentsOfURL: [URL NSNViệc chặn: [[NSBundle mainBundle] pathForResource: @ "sound" ofType: @ "wav"]] error: nil]; nhưng tôi vẫn có cùng một vấn đề; Tôi chỉ cần chia nó ra để gỡ lỗi dễ dàng hơn – Adam

6

Chỉ cần thay đổi một dòng như thế này:

NSURL* audioURL = [NSURL fileURLWithPath:audioString]; 
2

Bạn không đọc những câu trả lời một cách cẩn thận đủ - bạn đang sử dụng URLWithString, khi nào bạn nên sử dụng fileURLWithPath. Bạn không thể chuyển đường dẫn tệp: // tới URLWithString. Tôi nghĩ rằng bạn cũng cần phải thêm vào tập tin: // ở phía trước của chuỗi như bạn chỉ có một con đường (mà như đã chỉ ra không có giao thức).