2009-11-24 6 views
0

Simple question concernant la persistance des données entre les sessions d'application.iPhone UIImage - Data Persistance

Mon application permet à l'utilisateur de sélectionner une image de la bibliothèque en utilisant un UIImagePickerController. La photo sélectionnée est ensuite utilisée comme arrière-plan de l'application. Comme la méthode déléguée UIImagePickerController renvoie réellement une image par opposition à un chemin d'image, je me demande quelle est la meilleure façon de persister cette image sur les sessions utilisateur?

Aucune autre donnée ne doit être conservée pour l'instant, car tout le reste provient de SQL Server, mais je ne veux pas que l'ajout de l'image dans le serveur soit également nécessaire. signifie qu'à chaque fois que l'utilisateur ouvre l'application, l'image d'arrière-plan doit d'abord être téléchargée du serveur dans un tableau d'octets, puis convertie en une image.

J'ai trouvé le code suivant qui peut enregistrer l'image:

- (void)saveImage:(UIImage *)image withName:(NSString *)name { 
//save image 
NSData *data = UIImageJPEGRepresentation(image, 1.0); 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:name]; 
[fileManager createFileAtPath:fullPath contents:data attributes:nil]; 

} 

Je ne suis pas sur un Mac au moment, donc je ne peux pas tester ce code, mais j'ai quelques questions sur le code ci-dessus:

Je ne veux pas beaucoup de fichiers qui encombrent le système de fichiers. Donc, je voudrais un seul fichier d'arrière-plan (background.png); comment le code ci-dessus gérerait une situation où ce fichier existait déjà?

Remplacerait-il le fichier existant ou émettrait-il une erreur?

Comment procéder pour recharger l'image?

Répondre

1

Vous devez supprimer le fichier premier:

- (void)saveImage:(UIImage *)image withName:(NSString *)name { 
    //save image 
    NSData *data = UIImageJPEGRepresentation(image, 1.0); 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                 NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:name]; 

    NSError *error = nil; 
    if([fileManager fileExistsAtPath:fullPath]){ 
     if(! [fileManager removeItemAtPath:fullPath error:&error]) { 
      NSLog(@"Failed deleting background image file %@", error); 
      // the write below should fail. Add your own flag and check below. 
     } 
    } 
    [data writeToFile:fullPath atomically:YES]; 
} 

Relecture en devrait fonctionner comme suit:

... 
UIImage *bgImage = [UIImage imageWithContentsOfFile:fullPath]; 
...