Удаление данных двоичного атрибута (используется в NSImageView) в сущности Core Data - PullRequest
0 голосов
/ 24 июня 2009

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

- (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 уже привязан к атрибуту изображения модели и также доступен как выход. Поэтому я просто ищу кого-то, кто скажет мне, как сбросить атрибут, выбрав модель (если это то, что мне нужно сделать).

Буду признателен за любую помощь в коде. :)

Ответы [ 2 ]

2 голосов
/ 24 июня 2009
[image setImage:nil];

Является ли image на самом деле представлением изображения? Если это так, я должен напомнить вам, чтобы вы называли переменные экземпляра четко и точно.

Вам необходимо установить свойство image объекта (ей) модели, а не представления. Привязать виды через контроллеры к модели; затем, когда вы меняете модель, виды забирают изменения бесплатно.

0 голосов
/ 24 июня 2009

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

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

- (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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...