2009-06-23 6 views
0

私は、エンティティの画像を含む任意のバイナリ属性:imageを持っています。 インターフェイスでは、NSImageView(Image Well)と「イメージを削除」ボタンがあります。画像削除ボタンをクリックすると、私は:コアデータエンティティのバイナリ属性のデータ(NSImageViewで使用される)の削除

- (IBAction)saveAction:(id)sender { 
    NSError *error = nil; 
    if (![[self managedObjectContext] save:&error]) { 
    [[NSApplication sharedApplication] presentError:error]; 
    } 
    [tableView reloadData]; 
} 

- (IBAction)removeImage:(id)sender { 
    [image setImage:nil]; // image is a NSImageView outlet bound to the image attribute. 
    [self saveAction:sender]; 
} 

それはNSImageViewから画像を消去しますが、バイナリデータがまだコアデータのエンティティに保持されています。

どのようにしてコアデータエンティティの変更も反映されますか?

ありがとうございます!

編集:

NSImageViewも、すでにモデルの画像属性にバインドされ、出口として利用可能です。だから私は、モデルをフェッチすることによって属性をリセットする方法を教えてくれる人を探しています(もしそれが必要ならば)。

コードヘルプがありがとうございます。 :)

答えて

0

フェッチ要求から配列を変更しても、ストレージの実際のデータに影響を与えないという印象を受けました。しかし、私は間違っていました。私は試して、それは働いた!おかげでPeter、そしてみんなどこにいても!はい、 `image`はNSImageView口である

- (IBAction)removeImage:(id)sender { 
    // Fetch the entity in question. 
    NSManagedObjectContext *context = [self managedObjectContext]; 
    NSManagedObjectModel *model = [self managedObjectModel]; 
    NSEntityDescription *entity = [[model entitiesByName] valueForKey:@"myEntity"]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat: 
          @"unique_attr == %@", [unique_attr_outlet stringValue]]; 
    NSFetchRequest *fetch = [[NSFetchRequest alloc] init]; 
    [fetch setEntity:entity]; 
    [fetch setPredicate:predicate]; 

    // Load it into NSArray object and remove the binary data attribute. 
    NSArray *contextArray = [context executeFetchRequest:fetch error:nil]; 
    if ([contextArray count] > 0) 
    [[contextArray objectAtIndex:0] setValue:nil forKey:@"myImage"]; 

    [fetch release]; 
} 
2
[image setImage:nil]; 

image実際に画像ビューですか?もしそうなら、私はあなたのインスタンス変数を明確かつ正確に名前を付けることを思い出させる必要があります。

ビューではなく、モデルオブジェクトのimageプロパティを設定する必要があります。コントローラを介してビューをモデルにバインドします。モデルを変更すると、ビューはその変更を無料で取得します。

+0

:ここ

は、私はユニークな属性を持つ、現在選択されたエンティティのための私のイメージ除去機能を置き換えるものです。私はそれをここの文脈の名前に変更しました。 あなたは「コントローラを介してビューをモデルにバインドする」と言った。私はそれを雇用するために必要ないくつかのコードに私を紹介することができますか?私はプログラムでCore Dataを処理するのはかなり新しいです。ご協力いただきありがとうございます! –

+0

通常、バインディングはIBで設定します。プログラマチックに行う唯一の理由は、1つまたは複数のカスタムビュークラスを作成し、IBプラグインを作成したくないことです。詳細については、「Cocoa Bindings Programming Topics」を参照してください。http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaBindings/ –

+0

プログラミング上のバインディングやInterface Builderによるバインディングの違いについてはわかりません。私はあなたの助けに感謝します。私はこれをより速く完了するのに役立ついくつかの直接的なコードを得ることができれば嬉しいです。 –

関連する問題