2016-08-04 20 views
0

Ich arbeite an einer Snapchat-ähnlichen App und versuche, die NSData-Repräsentation von Bildern und Videos zwischenzuspeichern. Ich habe versucht mit NSCache, aber das hat nicht funktioniert, jedes Mal, wenn die App in den Hintergrund ging, wurden alle Objekte im Cache entfernt, dann habe ich NSUserDefaults zum Caching versucht, aber das war auch kein guter Ansatz. Obwohl es funktioniert und Daten mit NSUserDefaults bestehen bleiben, nimmt es eine Menge Speicher auf und ich habe gelesen, dass es unpraktisch ist, diese Art von Objekten in dieser Klasse zu speichern. Was sind Ihre Vorschläge für Caching und persistente Daten neben den beiden oben genannten?NSData Caching iOS

Antwort

0

Schreiben Sie NSData in Dokumentenverzeichnis Ihre Anwendung und es lesen, wenn Sie diese Daten wieder in Ihrer Anwendung benötigen

zum Schreiben von Daten auf Anwendungsdokumentenverzeichnis

//get the path of our apps Document Directory(NSDocumentDirectory) 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

//the path is stored in the first element 

NSString *path = [paths firstObject]; 

//append the name of our file to the path: /path/to/myimage.png 

path = path = [path stringByAppendingPathComponent:@"myimage.png"]; 

//store any errors 

NSError *error; 

// Write NSData to Disk 


BOOL success = [imageData writeToFile:path atomically:YES]; 
if(success){ 
    NSLog(@"Success"); 
}else{ 
    NSLog(@"Error: %@",[error localizedDescription]); 
} 

zum Lesen von Daten aus der Anwendung des Dokumentverzeichnis

/get the path of our apps Document Directory(NSDocumentDirectory) 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

//the path is stored in the first element 

NSString *path = [paths firstObject]; 

//append the name of our file to the path: /path/to/myimage.png 

path = path = [path stringByAppendingPathComponent:@"myimage.png"]; 

//store any errors 

NSError *error; 

NSData *rawImage = [NSData dataWithContentsOfFile:path 
options:NSDataReadingMappedIfSafe error:nil]; 

if(rawImage){ 
    UIImage *image = [UIImage imageWithData:rawImage]; 
    NSLog(@"%@",image); 
}else{ 
    NSLog(@"Error: %@",[error localizedDescription]); 
}