2011-02-04 16 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

画像が物理的に保存されており、プレビューで開くことができる場合は、(シミュレータとのやりとりは簡単です)チェックしましたか?私が見ることができるのは、一旦ネットワークからダウンロードされたディメンジョンがゼロであるかどうかを決してチェックしないことです。それが無ければ、あなたのコードはつづきますが最後に空のファイルを保存します。あなたはNSLog(@ "画像はダウンロードされていません")と早いリターンで、ディメンジョンにnil-checkを追加して終了してください。 – viggio24

+0

Documentsディレクトリとのやりとりをデバッグするもう一つの良い方法は、 'Info.plist'でファイル共有を有効にすることです。その後、iTunesを開いてファイルをブラウズして、コンピュータに転送することができます。 – Jim

答えて

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のコメントに従って、エラーをチェックしてください。ファイルを正しく読み込んでいないか、書き込めません。

+0

ネイピア非常にありがとう、それは私の多くの助け:) – ask123

関連する問題