117 votes

Enregistrer une Image au dossier de Documents d’Application de UIView sur IOS

J'ai une UIImageView qui permet à un utilisateur de place et maintenez une image jusqu'à ce qu'il puisse être sauvé. Le problème est que je peux pas comprendre comment le fait d'enregistrer et de récupérer l'image que j'ai mis dans la vue.

J'ai récupéré et placé l'image dans le UIImageView comme ceci:

//Get Image 
- (void) getPicture:(id)sender {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = (sender == myPic) ? UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    [self presentModalViewController:picker animated:YES];
    [picker release];
}


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage (UIImage *)image editingInfo:(NSDictionary *)editingInfo {
    myPic.image = image;
    [picker dismissModalViewControllerAnimated:YES];
}

Il affiche l'image sélectionnée dans mon UIImageView très bien, mais je n'ai aucune idée de comment l'enregistrer. Je l'enregistrement de toutes les autres pièces de la vue (surtout UITextfield) dans la Base de Données. J'ai cherché et cherché et essayé plusieurs morceaux de code que les gens ont suggéré, mais soit je ne suis pas entré le code correctement, ou ces suggestions ne fonctionnent pas avec la façon que j'ai mon code mis en place. Il est probable que l'ancien. J'aimerais enregistrer l'image dans la UIImageView à l'aide de la même action (bouton enregistrer) que j'utilise pour enregistrer le texte dans la UITextFields. Voici comment j'épargne mon UITextField info:

// Handle Save Button
- (void)save {

    // Get Info From UI
    [self.referringObject setValue:self.myInfo.text forKey:@"myInfo"];

Comme je l'ai dit plus tôt, j'ai essayé plusieurs méthodes pour obtenir que cela fonctionne, mais ne peut pas obtenir une prise sur elle. Pour la première fois de ma vie, j'ai voulu causer des dommages physiques à un objet inanimé, mais j'ai réussi à me retenir.

Je voudrais être en mesure de sauver l'image de l'utilisateur place dans le UIImageView dans l'application documents du dossier, et ensuite être capable de le récupérer et de le placer dans un autre UIImageView pour afficher lorsque l'utilisateur appuie ce point de vue sur la pile. Toute aide est grandement appréciée!

344voto

Danilo Campos Points 4760

C'est du tout bon, l'homme. À ne pas nuire à vous-même ou les autres.

Vous ne voulez probablement pas à stocker ces images dans la Base de Données, car cela peut influer sur les performances, si l'ensemble de données devient trop importante. Mieux écrire les images dans les fichiers.

NSData *pngData = UIImagePNGRepresentation(image);

Ce sort PNG données de l'image que vous avez capturée. À partir d'ici, vous pouvez l'écrire dans un fichier:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory 
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; //Add the file name
[pngData writeToFile:filePath atomically:YES]; //Write the file

La lecture plus tard, il fonctionne de la même manière. Construire le chemin d'accès comme nous venons de fait ci-dessus, puis:

NSData *pngData = [NSData dataWithContentsOfFile:filePath];
UIImage *image = [UIImage imageWithData:pngData];

Ce que vous aurez probablement envie de faire est de faire une méthode qui crée des chaînes de chemin d'accès pour vous, puisque vous ne voulez pas que le code jonché partout. Il pourrait ressembler à ceci:

- (NSString *)documentsPathForFileName:(NSString *)name
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);  
    NSString *documentsPath = [paths objectAtIndex:0];

    return [documentsPath stringByAppendingPathComponent:name]; 
}

J'espère que c'est utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X