1

画像パスをドキュメントフォルダに保存し、パスをsqlite3ローカルデータベースに保存するのに問題があります。

今日、私は画像をBLOBとしてデータベースに正常に保存しましたが、インターネットを読んで、これは推奨されないと言われました。

だから、今私はDBに画像パスを保存しようとしていますが..

状況

  1. ユーザーがボタンをタップして(UIImagePickerViewを介して)画像を選択するか、新しい写真を撮ります
  2. 画像を選択すると、選択した画像でimageViewが設定されます。

ピッカーのコード:

-(void)imagePickerController:(UIImagePickerController *)pickr didFinishPickingMediaWithInfo:(NSDictionary *)info{
    UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
    /* Test code for saving data */   
    //NSString *dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    //NSString *pngPath = [NSString stringWithFormat:@"%@/test.png",dir];
    //NSData *data = [NSData dataWithData:UIImagePNGRepresentation(image)];
    //[data writeToFile:pngPath atomically:YES];

    [imageView setImage:image];
    picture = YES;
    [pickr dismissModalViewControllerAnimated:YES];
}

今、私はいくつかの質問を受けました

  1. 私のデータベースでは、イメージはBLOBタイプです。TEXTに編集する必要がありますか?
  2. パスはどのように保存されますか?つまり、テストコードでは/test.pngは一般的な画像名です。選択した画像名も保存され、取得できるようになりますか?または、ライブラリから選択した画像を「IMG0001」という名前で保存すると、「テスト」として保存されますか?
  3. 画像をドキュメントフォルダに保存し、DBにパスしてから取得する正しい方法は何ですか?

私は答えを見つけるためにたくさんググったが、たくさん実験した後、私はあきらめた。

前もって感謝します

4

2 に答える 2

1

ドキュメントディレクトリに画像を保存する方法に関する素晴らしいチュートリアルです

BLOB フィールドを TEXT フィールドに変換し、その画像のファイル名を保存するだけです。Documents ディレクトリにフォルダを作成し、フォルダ名/ファイル名.png でアクセスすることもできます。

この情報がお役に立てば幸いです..

編集

そのフォルダーが存在するかどうかを確認するコードは次のとおりです。存在しない場合は、新しいそのフォルダーを作成します

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"MyFolder"];

if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]){

    NSError* error;
    if(  [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error])
        ;// success
        else
        {
            NSLog(@"[%@] ERROR: attempting to write create MyFolder directory", [self class]);
            NSAssert( FALSE, @"Failed to create directory maybe out of disk space?");
        }
}
于 2013-01-10T13:46:51.067 に答える
0

アプリケーションサンドボックスフォルダにしかアクセスできないため、ユーザーのフォトライブラリから画像に直接アクセスすることはできません。

したがって、画像をblobファイルとしてデータベースに保存したくない場合は、画像をアプリのドキュメントフォルダー内のcachesフォルダーに保存してから、画像に設定したファイル名をデータベースに保存する必要があります。

すべての画像が同じパスフォルダにあるため、パス全体をデータベースに実際に保存する必要はありませんが、ファイル名だけで十分です。

于 2013-01-10T13:43:56.850 に答える