2011-02-04 75 views
1

我在iphone中存在互聯網連接時保存圖像。 現在我想加載保存在文檔目錄中的圖像。我得到的路徑,但圖像不顯示。請幫助我。 在此先感謝。如何從文檔目錄加載圖像/ IPHONE

這裏是我的代碼:

+(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

如果圖像已經物理保存並且可以使用預覽打開,您是否已檢查過(易於使用模擬器)?我能看到的是,你永遠不會檢查一旦從網絡上下載後是否爲零,是否爲零。如果它是零你的代碼將繼續前進,但最終保存一個空文件。你應該在dimage上添加一個無效檢查,並用NSLog(@「image not downloaded」)退出並提前返回。 – viggio24 2011-02-04 14:32:41

+0

調試與Documents目錄交互的另一個好方法是在Info.plist中打開文件共享。然後你可以打開iTunes瀏覽文件並將它們傳送到你的電腦。 – Jim 2011-02-04 15:27:08

回答

2

viggio24使得一個好點。但是,此代碼看起來非常複雜,難以置信的簡單。你爲什麼要下載數據,然後把它變成圖像,只是把它變成數據,最後寫出來呢?然後你再讀一遍,製作一個新的圖像?爲什麼不把文件下載到磁盤並閱讀? UIImage將爲您完成所有管理PNG和JPEG的工作。例如:

+(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]; 
} 

儘管這在大多數情況下仍然是一個可怕的想法,因爲它阻止了調用線程。最好用NSURLDownload這樣做,它會在後臺爲你做所有事情,並告訴你什麼時候完成。

我會簡化代碼,然後按照viggio24的評論,確保你錯誤檢查這個東西。你可能只是沒有正確讀取文件或沒有寫入它。

相關問題