2

Documents ディレクトリ内のリスト f ファイルを表示する UITableView があります...そして、それを押したときに Documents ディレクトリ内のオーディオ ファイルを再生したいのです...

エラーなしで実行されますが、押してもオーディオが再生されません...

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.caf",indexPath.row+1]];
NSURL *audioURL = [NSURL URLWithString:fileName];

NSData *audioData = [NSData dataWithContentsOfURL:audioURL];

NSError *error;

_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error];

    _audioPlayer.delegate = self;
        [_audioPlayer play];
}
4

2 に答える 2

3

この行を変更します。

NSURL *audioURL = [NSURL URLWithString:fileName];

これに:

NSURL *audioURL = [NSURL fileURLWithPath:fileName isDirectory:NO];

そして、次のようにします。

 if(_audioPlayer == nil)
    {
        _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:nil];
    }
    else
    {
        _audioPlayer = [self.audioAlert initWithContentsOfURL:audioURL error:nil];
    }
于 2013-01-28T03:39:17.753 に答える
0

まず、ファイル パスを宣言する最良の方法は次のとおりです。

- (NSString *)docsdir {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
}

ヘッダーで、宣言しますNSString *Path;

次に、ビューがロードされたときにこのようにパスを宣言します

Path = [[self docsdir]stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.caf",indexPath.row+1]];
if (![[NSFileManager defaultManager]fileExistsAtPath:Path]) {


    [[NSFileManager defaultManager]copyItemAtPath:[[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"%d",indexPath.row+1] ofType:@"caf"] toPath:Path error:nil];


}

今すぐ再生するには、これを行います

    AVAudioPlayer *player = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:Path] error:&error];
player.delegate = self;
[player play];
于 2013-01-28T03:15:20.467 に答える