1

サーバーからいくつかの小さなサイズの曲をダウンロードして(NSData)をNSUserDefaultsに保存しているので、サーバーからダウンロードして再度再生する代わりに、必要なときにデバイスで直接キャッシュして再生するために使用できます。問題は、NSUserDefaultsにデータ形式として小さいサイズの曲をいくつか保存すると、デバイスメモリの量が減り、メモリの警告やクラッシュなどが発生することです。

誰かが私にそれを解決する方法を教えてもらえますか?キャッシュの目的で曲のデータをデバイスに永続的に保存し、同時により少ないメモリ使用量で保存するにはどうすればよいですか?

更新:提案に従って、曲のデータをファイルとして辞書に追加し、以下のように取得しようとしました。しかし、それでも私は同じ問題に直面しています。約30MBのデータが取得された後のメモリ警告です。誰かがこれを解決するのを手伝ってくれませんか?約40mbの曲データを保存して保存する必要があります。

    NSURL *songurl = [NSURL URLWithString:downloadSOngUrl];
            NSMutableData *songdata = [NSMutableData dataWithContentsOfURL:songurl];

NSString *fileName = [downloadSOngUrl lastPathComponent];
            NSLog(@"fileName: %@",fileName);

            [appDelegate writeSongIntoDocsDirectory :songdata :fileName];

-(void) writeSongIntoDocsDirectory :(NSData *) inSongData :(NSString *) songNamePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSLog(@"songNamePath: %@", songNamePath);

    songNamePath = [songNamePath stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
    NSLog(@"songNamePath: %@", songNamePath);

    if ( [inSongData writeToFile:[documentsDirectory stringByAppendingPathComponent:songNamePath] atomically:YES] ) 
    {
        // Success !
        NSLog(@"Successfully saved the song into documents directory");

    } 
    else 
    {
        // Error !  
        NSLog(@"Error when Successfully saving song into documents directory");
    }
}
-(NSData *) readSongDataFromDocsDirectory :(NSString *) filePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSData *readData = [NSData dataWithContentsOfFile:[documentsDirectory stringByAppendingPathComponent:filePath]];

    return readData;
}

前もって感謝します!

4

1 に答える 1