0

此特定功能的目的是能够从表格视图中显示和播放本地录音。加载本地caf文件的代码如下:

- (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?

提前谢谢了

4

2 回答 2

0

您正在将 NSString 值添加到 items 数组中。将AVAudioPlayer初始化行替换为以下内容:

avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[items objectAtIndex:indexPath.row]] error:nil];
于 2012-07-24T09:35:52.157 回答
0

在您的 loadFileInformation 方法中

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

将是一个正确的方法。

也看看什么是 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 数组中有文件名,但不是完整的路径。因此,我们将尝试将其附加到路径并获取该路径中可用的数据并使用它加载您的音频播放器。

于 2012-07-24T09:37:57.837 回答