2016-03-20 5 views
0

ボタンをクリックすると、毎回オーディオが読み込まれます。すでにアップロードされている場合、オーディオをすぐに再生するには?オーディオがオフラインで利用できるかどうかを確認するにはどうすればいいですか?

- (void) song{ 
if (_index1 == 0) { 
    NSString *stringURL = @"https://drive.google.com/uc?export=download&id=0B6zMam2kAK39UjJuTHB5QWRuRU0"; 
    NSURL *url = [NSURL URLWithString:stringURL]; 
    NSData *urlData = [NSData dataWithContentsOfURL:url]; 
    if (urlData) 
    { 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 

     NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"music.mp3"]; 
     [urlData writeToFile:filePath atomically:YES]; 
     self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:filePath] error:nil]; 
    } 
    } 
} 

答えて

0

ドキュメントディレクトリに「music.mp3」というファイルを保存するコードがあります。 (あなたはむしろstringWithFormatよりもパスを扱うためのNSStringのメソッドを使用する必要があります。stringByAppendingPathComponentを見てみましょう。それはあなたのためのパス文字列を構築するの詳細を処理します。)

私はあなただけの単一の音を扱っている集まりますファイル?

ファイルが存在するかどうかを確認するには、NSFileManagerのインスタンスを作成し、fileExistsAtPathのようなfileExistsメソッドの1つを使用する必要があります。ファイルが存在する場合は、ダウンロードをスキップしてファイルをロードして再生します。

dataWithContentsOfURLを使用してWebからファイルをダウンロードしないでください。これはダウンロードが完了するまでUIをブロックする同期呼び出しです。代わりにNSURLSessionを使用してください。 NSURLDownloadTaskを作成し、そのファイルをディスクに直接ダウンロードし、ダウンロードが完了したらコードブロックを呼び出すことができます。

NSURLSessionsharedSessiondownloadTaskWithURLの方法を見てください。

レイWenderlichはNSURLSessionNSURLSessionDownloadTaskを使用してチュートリアルを持っています

NSURLSession Tutorial

+0

するとあなたは私のコードからの例を与えることができる、してください。私はそれを行うことはできません。 – Dark

+0

「私のコードから一例を挙げてください。」私のコードを書くことができるのですか?あなたが試みていないなら、確かにそれをすることはできません。 Ray Wenderlichのチュートリアルを読んで、私の答えにリンクし、練習をして、あなたのプロジェクトのコードを書く方法を考えてみてください。問題が発生した場合は、更新されたコードを投稿してください。 –

+0

@ダーク、どの部分に問題がありますか? 'NSFileManger'を使ってファイルが存在するかどうかを確認するか、ファイルをダウンロードするために' dataWithContentsOfURL'ではなくNSURLSessionを使うようにコードを書き直しますか? –

関連する問題