2016-03-21 6 views
1

このコードでは、ボタンをクリックするたびにオーディオがダウンロードされます。私はローカルに保存されたオーディオをチェックしたい。読み込まずに実行した場合に格納されます。これどうやってするの?オーディオをチェックする方法はローカルに保存されており、ダウンロードせずに実行しますか?

- (void) song{ 
NSString *stringURL = @"https://drive.google.com/uc?export=download&id=0B6zMam2kAK39VHZ1cUZsM3BhQXM"; 
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]; 

} 

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

NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"music.mp3"]; 

self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:filePath] error:nil]; 
} 
+0

apptalityの答えはあなたの問題を解決します。しかし、ドキュメントディレクトリではなくキャッシュディレクトリを使うことを強くお勧めします。ドキュメントのすべてがiCloudにバックアップされ、Webから簡単にリロードできるものはクラウドにバックアップされていないため、アプリが拒否される可能性があります。 (あるいは、あなたのファイルにいくつかのフラグを設定して、それがバックアップされないようにすることもできます。残念ながら私は便利ではありませんが、キャッシュディレクトリを使用すると最後にはよりスマートで少ないコードになります)。 –

答えて

3

NSFileManager次のメソッドがあります。

- (BOOL)fileExistsAtPath:(NSString *)path; 
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(nullable BOOL *)isDirectory; 
- (BOOL)isReadableFileAtPath:(NSString *)path; 
- (BOOL)isWritableFileAtPath:(NSString *)path; 
- (BOOL)isExecutableFileAtPath:(NSString *)path; 
- (BOOL)isDeletableFileAtPath:(NSString *)path; 

だから我々はこのように確認してください。

NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"music.mp3"]; 
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:NO]; 

if (!fileExists) { 
    // start the download process here then save 
    [urlData writeToFile:filePath atomically:YES]; 
}