2012-07-24 85 views
0

此特定功能的目的是能夠從表格視圖顯示和播放本地錄音。加載本地CAF文件中的代碼如下:加載本地音頻.caf文件,使用哪個對象? iOS

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self loadFileInformation]; 
} 

- (void)loadFileInformation 
{ 
    items = [[NSMutableArray alloc] init]; 
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil]; 
    for (int i = 0; i < [directoryContent count]; i++) [items addObject:[directoryContent objectAtIndex:i]]; 
    [self.tableView reloadData]; 
} 

隨着委託方法用於播放特定的文件,如下所示:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[[items objectAtIndex:indexPath.row] filePathURL] error:nil]; 
    avAudioPlayer.delegate = (id)self; 
    [avAudioPlayer prepareToPlay]; 
    [avAudioPlayer play]; 
} 

然而,當這種方法被稱爲我得到一個錯誤:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString filePathURL]: unrecognized selector sent to instance 0x239420' 

我只是想知道如果有人能指出我在正確的方向!當本地目錄的內容存儲在數組directoryContent中時,每個元素的對象是什麼? NSData

非常感謝提前

回答

0

在你loadFileInformation方法

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

將是一個正確的方法。

也可以看看What is NSSearchPathForDirectoriesInDomains?

編輯:

的內容的方式的NSString。 你爲什麼不嘗試分配AVudioPlayer對象與該路徑中可用的數據。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString * path = [documentsDirectory stringByAppendingPathComponent:[items objectAtIndex:indexPath.row]]; 

NSData *data = [[NSFileManager defaultManager] contentsAtPath:path]; 
AVAudioPlayer * player = [[AVAudioPlayer alloc] initWithData:data error:nil]; 

您在items數組中有文件名,但沒有完整的路徑。因此,我們會嘗試將其附加到路徑中,並獲取該路徑上的可用數據並加載您的音頻 播放器。

0

您正在將NSString值添加到您的項目數組。 替換爲以下的AVAudioPlayer起始線:

avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[items objectAtIndex:indexPath.row]] error:nil]; 
+0

感謝您的快速響應,NSLog(@「%@」,[NSURL fileURLWithPath:[items objectAtIndex:indexPath.row]]);''返回'363797875048.caf - file:// localhost /'和球員不起作用 – 2012-07-24 10:00:00