2009-06-23 2 views
0

У меня есть необязательный двоичный атрибут: image, содержащий изображение для моих объектов. В интерфейсе у меня есть NSImageView (Image Well) и кнопка «Удалить изображение». При нажатии на кнопку удаления изображения щелкнул, я:Удаление данных двоичного атрибута (используется в NSImageView) в объекте Core Data

- (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, но двоичные данные по-прежнему сохраняется в объекте Core Data.

Как отразить изменение в объекте Core Data?

Спасибо!

Edit:

NSImageView уже связан с атрибутом изображения модели, и доступны розетки тоже. Поэтому я просто ищу, чтобы кто-то сказал мне, как сбросить атрибут, извлекая модель (если это то, что мне нужно сделать).

Поблагодарили бы за любую помощь с кодом. :)

ответ

0

Мне показалось, что изменение массива из запроса на выборку не повлияет на фактические данные в хранилище. Но я был неправ. Я пробовал, и это сработало! Спасибо, Питер, и все в другом месте!

Вот что я заменил свою функцию удаления изображения для выбранного объекта, имеющего уникальный атрибут:

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

Да, 'image' является выход NSImageView. Я изменил название для контекста. Вы сказали: «Свяжите взгляды через контроллеры с моделью». Можете ли вы направить меня на какой-то код, который мне нужно использовать для этого? Я довольно новичок в программном обеспечении Core Data. Спасибо за вашу помощь! –

+0

Обычно вы устанавливаете привязки в IB. Единственная причина, по которой это делается программно, состоит в том, что вы создали один или несколько пользовательских классов представления и не хотите создавать для них подключаемый модуль IB. Дополнительные сведения см. В разделе «Темы программирования привязок к какао»: http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaBindings/ –

+0

Я не знаю, как привязка программно или через Interface Builder имеет здесь значение. Я ценю вашу помощь. Я также был бы признателен, если бы мог получить какой-то прямой код, который поможет мне закончить это быстрее. –

Смежные вопросы