CoreDataGeneratedAccessors для удаления объекта, кажется, не удаляет - PullRequest
3 голосов
/ 29 декабря 2011

У меня есть NSManagedObject, который имеет отношение «многие» к другому NSManagedObject.

Во время создания NSManagedObject я могу использовать сгенерированные средства доступа «removeNotesObject», и удаление работает нормально.Я могу создать объект для добавления в родительский объект, сохранить объект, удалить объект, а затем снова сохранить.Когда я выбираю этот родительский объект, объект, который я создал и удалил, все еще удаляется.

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

(Примечание. Добавление объектов работает, поэтому это не проблемас сохранением)

Для удаления объекта я извлекаю набор объектов и выбираю объекты, которые хочу удалить.Затем я удаляю объекты

NSSet *notes = summary.notes;
NSSet *oldNotes = [notes objectsPassingTest:^(id obj,BOOL *stop){
    Note *oldNote = (Note *)obj;
    BOOL sameRow = (oldNote.row == newNote.row);
    BOOL sameColumn = (oldNote.column == newNote.column);
    BOOL success = (sameRow && sameColumn);
    return success;}];
[summary removeNotes:oldNotes];

Я пытался сделать отношение обратным, чтобы удалить объекты, которые их не удалили.Я также пробовал разные правила удаления (cascade и nullify), которые снова не работали.Наконец, я попытался удалить каждый объект отдельно и удалить каждый объект из контекста после того, как удалил его из родительского объекта, который, к сожалению, снова не сработал.

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

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

Вам нужно сделать

NSManagedObjectContext * moc = .......;
[moc deleteObject:note]

edit: Основные данные, созданные аксессорами, просто удаляют объект из отношения, но не удаляют объект навсегда. Это имеет смысл, поскольку у вас может быть один NSManagedObject, связанный с несколькими другими NSManagedObjects через отношения.

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

0 голосов
/ 28 января 2012

Причина, по которой вышеприведенный код не сработал, заключается в том, что == фактически не сравнивает NSNumber.Вместо этого вам нужно вызвать 'isEqualTo:'.Я думаю, прежде чем он проверял адрес, следовательно, работал, прежде чем я его сохранил.Более того, он возвращал объект в NSSet, поэтому он работал.Во время отладки не было ясно, что это был за объект, но явно не тот, который мне был нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...