【问题标题】:Loading local audio .caf files, which object to use? iOS加载本地音频 .caf 文件,使用哪个对象? iOS
【发布时间】:2012-07-24 09:31:50
【问题描述】:

此特定功能的目的是能够从表格视图中显示和播放本地录音。加载本地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?

在此先感谢

【问题讨论】:

    标签: iphone ios tableview avaudioplayer caf


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢您的快速响应,NSLog(@"%@", [NSURL fileURLWithPath:[items objectAtIndex:indexPath.row]]); 返回363797875048.caf -- file://localhost/ 并且播放器无法正常工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多