2012-04-15 6 views
1

サーバーから複数の小さな曲をダウンロードしてNSUserDefaultsに保存する(NSData)ので、ダウンロードする代わりにデバイスで直接キャッシュして再生する必要があるときに使用できます。サーバーから再度再生します。 NSUserDefaultsのデータフォーマットとして小さなサイズの曲をいくつか保存すると、デバイスのメモリが大量になり、警告やクラッシュなどのメモリが低下します。iPhone:NSUserDefaultsのオーディオデータとメモリの問題を保存する

私はどのように解決できますか?どのように私はキャッシュの目的のためにデバイスに永続的に曲のデータを格納することができますと同時に、少ないメモリ使用量で格納する?

UPDATED:提案通り、曲データを辞書にファイルとして追加しようとしましたが、以下のように検索しようとしました。しかし、まだ私は同じ問題に直面している、約30MBのデータを取得した後のメモリの警告..誰かが私にこれを解決するのを助けることができますか?私は約40メガバイトの曲データを保存してそれを保存する必要があります。

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; 
} 

ありがとうございます!

答えて

0

これらのオーディオファイルをドキュメントディレクトリに保存すると、アプリケーションのサイズが小さくなるため、NSUserDefaultsは通常、アプリケーションの特定の小さな設定(プリファレンスやアプリケーションの特定ユーザー用)に格納されます。これが役立つことを望む。 。 :)あなたはアプリの実行中に、このオブジェクトは常に生きているとして、アプリのサイズを大きくしますNSUserDefaultsに保存するどのような

...

+0

こんにちは、返信いただきありがとうございます。オーディオファイルを保存する方法は?つまり、どんな形式ですか?各曲のNSDataをドキュメントディレクトリに保存しますか?私の曲のURLはサーバーから来ているので、NSData * data = [NSData dataWithContentsOfURL:url]を使用します。今すぐ曲のバイナリを取得します。 – Getsy

+0

NSDataには、writeToFileというメソッドがあります。atomically:あなたがしたいことを正確に行います。 NSDataのドキュメントを参照して、使用方法を確認してください。 –

+0

こんにちは、私は追加し、約70メガバイトの曲データのドキュメントディレクトリにファイルに格納するが、NSUserDefaultsで試したときに問題は同じです。 – Getsy

関連する問題