У меня есть следующий фрагмент кода внутри метода cellForRowAtIndexPath
. Код используется для удаления объекта из Core Data Store
при выполнении некоторых условий.Удаление основного объекта данных внутри cellForRowAtIndexPath метод
Я попытаюсь объяснить мою проблему с помощью одного конкретного объекта:
App условия запуска для объекта:
атрибута quitar = @"si"
переходных атрибутов sectionIdentifier = @"0"
Если пользователь добавляет новый объект к разделу, то наш примерный объект получает следующие значения:
атрибут quitar = @"si"
переходный атрибут sectionIdentifier = @"0"
атрибут borrar = @"si se puede borrar"
;
Приложение делает то, что я ожидаю, это означает, что объект объекта удален, и только что добавленный объект отображается внутри раздела. Но это лишь частично верно, то после проверки хранилища основных данных объект-пример изменил свои атрибуты, но не удаляется. Такое поведение приводит к сбою приложения при следующем запуске приложения. Если я снова запустил приложение, объект примера появится как удаленный в хранилище основных данных.
Это сообщение об исключении:
2014-02-14 11:32:27.033 DidIt[11267:a0b] *** Assertion failure in -[UITableViewRowData rectForRow:inSection:heightCanBeGuessed:], /SourceCache/UIKit_Sim/UIKit-2903.23/UITableViewRowData.m:1793
2014-02-14 11:32:27.041 DidIt[11267:a0b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for rect at invalid index path (<NSIndexPath: 0x8a22c00> {length = 2, path = 0 - 1})'
И это мой кусок кода, участвующих в этом вопросе, как сказал он находится внутри cellForRowAtIndexPath
метода:
//QUITAR SPECIAL ROW SECTION 0
NSString *sec = todoitem.sectionIdentifier;
NSString *quitar = todoitem.quitar;
if ([sec isEqualToString:@"0"] && [quitar isEqualToString:@"si" ] && (numObjectsSec0 > 1)){
NSLog(@"SE PODRIA QUITAR ESTE OBJETO *************************4 %@", todoitem.todoName);
NSManagedObjectContext *context = self.managedObjectContext;
[todoitem setValue:@"si se puede borrar" forKey:@"borrar" ];
has0SpecialRow = @"no";
NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
[context deleteObject: todoitem];
}
}
//END QUITAR SPECIAL ROW SECTION 0
Я не знаю, что думать об этом сообщении исключения, но УДАЛЕНИЕ управляемых объектов в 'cellForRowAtIndexPath' это ** действительно ** странно способ делать вещи. Это может помочь, если вы объясните, почему вы это делаете. –
Спасибо @TomHarrington, я попытаюсь объяснить, почему я это делаю. В tableView есть шесть фиксированных разделов, и я реализовал также способ расширения/сглаживания строк раздела. Я обнаружил исключения при добавлении или удалении объектов, если там были пустые разделы. Это заставило меня создать механизм, который создает новый объект в каждом разделе (я называю его специальной строкой), если на нем нет строк (обычных объектов). Затем, когда создается нормальный объект, я использую вышеупомянутый код для удаления специальной строки. Он работал нормально до сегодняшнего дня, но я думаю, что у меня что-то изменилось. – mvasco
@TomHarrington, может быть лучше использовать этот код только для установки значения атрибута, а затем выполнить удаление по другому методу? – mvasco