2011-07-05 2 views
0

У меня есть managedObjectContext с двумя объектами, каждый из которых содержит несколько записей. Объекты Entity A представлены в представлении таблицы, и я хочу, чтобы пользователь мог удалить любую сущность Entity A. Моя проблема заключается в том, что при отправке запроса на удаление этой записи вызывается неправильный объект!Удаление управляемого объекта из объекта

FYI, я обрабатываю процесс удаления отдельным методом, поэтому, когда кнопка «Удалить» в представлении «Таблица» запускается, прежде чем она будет удалена из представления, я сначала хочу убедиться, что она была удалена из управляемого объектаObjectContext ,

- (BOOL) deleteCompletedSuccessfully : (EntityA *) anEntry 
{ 
    [self.managedObjectContext deleteObject: anEntry]; 
    NSError *error = nil; 
    If (![self.managedObjectContext save:&error]) 
     { 
      NSLog (@”%@”, [error userInfo]); 
      return NO; 
     } 
    return YES; 
} 

Ошибка: Error Domain=NSCocoaErrorDomain Code=1570 \"The operation couldn\U2019t be completed. (Cocoa error 1570.)…. А остальные сообщения об ошибке указывает на то, что я пытаюсь удалить всухую объект в EntityB !!!! Хотя anEntry фактически находится в EntityA.

Я попытался инкапсулирования вход (anEntry этот случай) в массив, то есть:

- (BOOL) deleteCompletedSuccessfully : (NSArray *) array 
{ 
    EntryA *anEntry = [array objectAtIndex: 0]; 
// and the rest of the code 

та же ошибка. Как я могу заставить его искать эту конкретную запись в определенном объекте ?!

Любая помощь?

ответ

4

Я думаю, что у вас есть некоторое концептуальное замешательство между объектами и управляемыми объектами.

Объекты абстракции аналогичные Классы. Управляемые объекты являются фактическими индивидуальными экземпляры NSManagedObject или один из его подклассов. Объекты в модели данных сообщают контексту управляемых объектов, какие атрибуты и отношения друг к другу будут иметь экземпляры управляемых объектов.

Сущности существуют только в модели данных, тогда как управляемые объекты находятся в «графе объектов», который является фактически действующей группой связанных объектов, живой в памяти. Объекты просто описывают контекст управляемых объектов, как все сочетается так же, как определение класса сообщает компилятору, как все свойства и поведения, которые подходят друг другу в классе. Управляемые объекты как экземпляры имеют данные и поведение так же, как и все другие живые объекты.

Точно так же контекст управляемого объекта не добавляет, не удаляет и не устанавливает значения объектов каким-либо образом. Вместо этого он добавляет, удаляет или устанавливает значения управляемых объектов, настроенных сущностями в своей модели данных.

Итак, когда вы говорите:

У меня managedObjectContext 2 субъектов, каждый из которых содержит несколько объектов.

То, что вы на самом деле имеете в виду:

У меня есть модель данных с 2 субъектами и контекстом управляемого объекта с большим количеством управляемых объектами, сконфигурированных этими объектами.

В представлении таблицы могут отображаться только данные из экземпляров, настроенных на одну сущность (что наиболее часто встречается), но фактические данные, а также вставки и удаления происходят с экземплярами управляемых объектов, а не с объектами, которые не могут быть изменены по этой точке.

Однако, я не думаю, что путаница терминов является фактической причиной вашей проблемы. Вместо этого я думаю, что ошибка пытается сказать вам, что вы удаляете объект, сконфигурированный EntityA, из требуется связь с объектом, настроенным с помощью entityB.

Ошибка какао 1570 - это NSValidationMissingMandatoryPropertyError, который, как подсказывает название, возникает при попытке сохранить управляемый объект с требуемым свойством с нулевым значением. Контракт объекта управления пытается проверить граф объекта перед тем, как он сэкономит, и когда он обнаружит недостающее требуемое свойство, оно вызывает эту ошибку.

Я не могу сказать вам ничего больше, потому что я понятия не имею, как выглядит ваша модель данных.

+0

Извините за путаницу. Ты прав. Поэтому позвольте мне перефразировать мой вопрос: в моей модели данных у меня есть 2 несвязанных объекта и контекст управляемых объектов. Я смог сохранить несколько записей для каждого объекта и получить их правильно. Однако, когда я пытаюсь удалить запись из EntityA, я получил эту ошибку, относящуюся к EntityB, которая не имеет ничего общего с EntityA или с объектом, который требуется удалить. Я просто пытаюсь удалить managedObject из aContext с двумя несвязанными объектами. – Canopus

+0

Вы можете получить ошибку проверки для любого объекта при сохранении независимо от предшествующего действия для других объектов. Ошибка, скорее всего, происходит где-то еще в коде, но обнаруживается только тогда, когда контекст сохраняет и запускает проверку. – TechZen

+0

Спасибо. Найди его. – Canopus

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