2012-04-15 7 views
1

Ich lade mehrere kleine Songs vom Server herunter und speichere (NSData) in NSUserDefaults, so dass ich es verwenden kann, wenn es benötigt wird, um direkt auf dem Gerät zu cachen und abzuspielen und wieder vom Server spielen. Das Problem, wenn ich ein paar kleinere Songs als Datenformat in NSUserDefaults speichern, reduziert es viel Speicher des Geräts und werfen Speicher Warnung oder Absturz etc.iPhone: Speichern von Audiodaten auf NSUserDefaults und Speicherproblemen

Könnten Sie mir helfen, wie kann ich es lösen? Wie kann ich Song-Daten dauerhaft auf dem Gerät für Cache-Zwecke speichern und gleichzeitig weniger Speicher verwenden?

AKTUALISIERT: Wie der Vorschlag, ich habe versucht, Song-Daten in Wörterbuch als Datei hinzuzufügen und versuchte, es wie folgt abrufen. Aber, immer noch habe ich das gleiche Problem, Speicherwarnung nach etwa 30mb Daten abgerufen .. Könnte mir jemand helfen, dies zu lösen? Ich muss etwa 40 MB Songdaten speichern und speichern.

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

Vielen Dank im Voraus!

Antwort

0

Speichern Sie diese Audiodateien besser im Dokumentenverzeichnis, da dies die Größe der App reduziert. NSUserDefaults wird normalerweise in kleinen Einstellungen für die App verwendet, wie die Einstellungen und alle für den jeweiligen Benutzer der App. hoffe das hilft. . :)

Was auch immer Sie in der NSUserDefaults speichert die App Größe zunehmen, wenn dieser Artikel immer am Leben ist, während die App läuft ...

+0

Hallo, Danke für die Antwort. Wie sagt man, um Audiodateien zu speichern? Ich meine, welches Format? Soll ich NSData von jedem Lied im Dokumentenverzeichnis speichern? Weil meine Song-URLs vom Server kommen und ich NSData * data = [NSData dataWithContentsOfURL: url]; um den Song jetzt binär zu bekommen. – Getsy

+0

NSData hat eine Methode namens writeToFile: atomisch: das macht genau das, was Sie tun möchten. Sehen Sie in der Dokumentation zu NSData nach, wie Sie es verwenden können. –

+0

Hallo, habe ich hinzugefügt und speichern in Datei in Dokumenten-Verzeichnis um 70 MB Song-Daten, aber das Problem ist das gleiche, wenn ich mit NSUserDefaults als auch versuchte. – Getsy

Verwandte Themen