2011-02-04 4 views
1

Je sauvegarde les images quand il y a une connexion Internet dans mon iPhone. Maintenant, je veux charger les images qui sont sauvegardées dans le répertoire des documents. Je reçois le chemin, mais l'image ne s'affiche pas. S'il vous plait aidez moi avec ceci. Merci d'avance.Comment charger l'image à partir du répertoire de documents/IPHONE

Voici mon code:

+(UIImage *) getImagewithName:(NSString*) imagepath 
{ 
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

    UIImage *gimage=[UIImage imageWithContentsOfFile: [NSString stringWithFormat:@"%@/%@",docDir,imagepath]]; 

    NSLog(@"%@/%@",docDir,imagepath); 

    return gimage; 
} 

+(void)DownloadImage:(NSString*)ImagePath { 
    if ([ImagePath isEqualToString:@""]) 
     return; 

    UIImage *dimage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http:/uploads/%@",ImagePath]]]]; 
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSLog(@"pathIMAGEPATHS:::::::%@",ImagePath); 
    NSLog(@"path:::::::%@",docDir); 
    NSArray *patharr=[ImagePath componentsSeparatedByString:@"."]; 
    NSString* Ext=[NSString stringWithFormat: @"%@",[patharr objectAtIndex:1]]; 
    NSString *FilePath = [NSString stringWithFormat: [NSString stringWithFormat:@"%@/%@",docDir,ImagePath]]; 
    if([Ext isEqualToString:@"png"]) 
    { 
     NSLog(@"saving png"); 

     NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(dimage)]; 
     [data1 writeToFile:FilePath atomically:YES]; 
    } 
    else if([Ext isEqualToString:@"jpeg"]) 
    { 
     NSLog(@"saving jpeg"); 
     //NSString *jpegFilePath = [NSString stringWithFormat:@"%@/test.jpeg",docDir]; 
     NSData *data2 = [NSData dataWithData:UIImageJPEGRepresentation(dimage, 1.0f)];//1.0f = 100% quality 
     [data2 writeToFile:FilePath atomically:YES]; 
    } 
    else 
    { 
     NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(dimage)]; 
     [data1 writeToFile:FilePath atomically:YES]; 

    } 
    NSLog(@"saving image done"); 

    [dimage release]; 

} 
+1

avez-vous vérifié (facile à faire avec le simulateur) si l'image a été sauvée physiquement et peut être ouverte avec Aperçu? Ce que je peux voir, c'est que vous ne vérifiez jamais si le dimage, une fois téléchargé sur le réseau, est nul ou non. S'il est nul, votre code continuera à fonctionner mais finalement, il enregistrera un fichier vide. Vous devriez ajouter une vérification nil sur dimage et sortir avec un NSLog (@ "image non téléchargée") et un retour anticipé. – viggio24

+0

Un autre bon moyen de déboguer des interactions avec le répertoire Documents est d'activer le partage de fichiers dans votre 'Info.plist'. Ensuite, vous pouvez ouvrir iTunes pour parcourir les fichiers et les transférer sur votre ordinateur. – Jim

Répondre

2

viggio24 fait un bon point. Mais de plus, ce code semble incroyablement compliqué à faire quelque chose d'incroyablement simple. Pourquoi téléchargez-vous des données, puis transformez-le en une image, juste pour le remettre dans les données, et enfin l'écrire? Et puis vous le relisez et faites une nouvelle image? Pourquoi ne pas simplement télécharger le fichier sur le disque et le lire? UIImage fera tout le travail de gestion PNG et JPEG pour vous. Quelque chose comme:

+(void)downloadImage:(NSString*)imagePath { 
    if ([imagePath isEqualToString:@""]) 
     return; 

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[@"http://110.234.132.132/MBCMcAdmin/uploads" stringByAppendingPathComponent:imagePath]]]; 
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    [data writeToFile:[docDir stringByAppendingPathComponent:imagePath] atomically:YES]; 
} 

Ceci est encore une idée horrible dans la plupart des cas, cependant, car il bloque le thread appelant. Il est préférable de le faire avec NSURLDownload qui fera tout pour vous en arrière-plan et vous dira quand c'est fait.

Je simplifierais le code, puis je ferais suivre les commentaires de viggio24, en vérifiant que l'erreur était bien vérifiée. Vous ne lisez probablement pas le fichier correctement ou ne l'écrivez pas.

+0

Napier Merci beaucoup, ça m'a beaucoup aidé :) – ask123

Questions connexes