2

コアデータでマジカルレコードを使っています。

私のアプリには、いくつかの文字列属性を持つエンティティが 1 つだけあります。今、このエンティティに画像を追加したいのですが、魔法の記録を使用してそれを行う方法がわかりません。検索しましたが、ウェブ上で何も見つかりませんでした。私のアプリでは、すべてのデータがユーザーによって挿入され、画像、カメラまたは写真ライブラリによっても挿入されます。

Magical Record と Core Data を使用して画像を保存するにはどうすればよいですか?

4

4 に答える 4

2

画像をアプリのドキュメント フォルダーに保存し、コア データ エンティティにファイルの URL を含む文字列を保存するだけです。

于 2013-06-13T12:42:08.967 に答える
0

私は私の答えを見つけました:

保存する:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString*nomeImmagine = [[NSString alloc] initWithFormat:@"%@", self.fieldName.text];
NSString *pngFilePath = [NSString stringWithFormat:@"%@/%@.png",documentsDirectory, nomeImmagine];
UIImage *image = self.showSelectedImage.image; // imageView is my image from camera
NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(image)];
[data1 writeToFile:pngFilePath atomically:NO];

ロードするには:

 -(void) loadImageFromPathInsideView
{
    // [self loadImageFromPathInsideView];
    Ricetta* contact =[[DataManager sharedClass]dammiTuttaLaRicetta:self.indice];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

    NSString*nomeImmagine = [[NSString alloc] initWithFormat:@"%@", contact.nome2];
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* path = [NSString stringWithFormat:@"%@/%@.png",documentsDirectory, nomeImmagine];;
    UIImage* image = [UIImage imageWithContentsOfFile:path];
    self.image.image = image;
}
于 2013-06-27T11:40:53.277 に答える
0

一言アドバイス。画像をtransformable(aka NSImage) タイプとしてコア データに保存するのは簡単ですが、平均 100k で 50k から 200kb の範囲の小さな数 (20 以上) でもアプリのパフォーマンスが全体的に遅くなります。あるコントローラーが別のコントローラーにバインドされることが多いことを考えると、関係を介してそれらのファイルをリンクしても遅くなります。

Documents フォルダーを指すようにローカル パス名を保存する上記の方法はNSString、全体的なエクスペリエンスにとって非常に優れています。

そうは言っても、(約 150x150 の) サムネイル画像を作成することはtransient transformable NSImage、biggy をロードしてその場で何度もサイズ変更を行うよりも、一度作成してそれを として保存する方が有利な場合があります。そのパフォーマンスは、50 以上のサムネイル画像を保持するテーブルを上下にスクロールすることで簡単に確認できます。

于 2013-06-27T22:54:00.230 に答える
0

上記で試したことは簡単に実行できます。私があなたにできる最善のアドバイスは、CoreDataデータベースから画像を保存して取得するためだけに新しいサンプル プロジェクトを作成することです。そうすれば、プロセスがどのように機能するかを正確に知ることができます。この機能を現在のプロジェクトに埋め込もうとすると、何がどこで起こっているのか分からなくなる可能性があります。

これは非常に簡単な例です。デリゲートを .h ファイルに自分でインポートするなどしてください。

最初にUIImagePicker経由ボタンを開始します

-(IBAction)pickImage:(id)sender
{
        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.delegate = self;
        [self presentModalViewController:imagePicker animated:YES];
}

画像が選択されると、デリゲート メソッドの 1 つを使用してボタンに表示できます。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)selectedImage editingInfo:(NSDictionary *)editingInfo 

    self.imageButton.imageView.image = selectedImage; 

それを保存して、データベースの属性のタイプにタイプをCoreData割り当ててから保存するにはUIImageTransformablemanagedObjectContext

役立つリンク:

UIImagePicker クラス リファレンス

魔法の記録文書

CoreData レシピ サンプル プロジェクト

この助けを願って、頑張ってください!

于 2013-06-14T10:14:42.527 に答える