我在cellForRowAtIndexPath
方法中有以下一段代码。满足一些条件时,该代码用于从Core Data Store
中删除对象。删除cellForRowAtIndexPath方法中的核心数据对象
我会尽量解释使用一个特定的对象我的问题:
应用为对象的启动条件:
属性quitar = @"si"
瞬态属性sectionIdentifier = @"0"
如果用户添加一个新的对象的部分,那么我们的示例对象获得以下值:
属性quitar = @"si"
瞬态属性sectionIdentifier = @"0"
borrar = @"si se puede borrar"
属性;
该应用程序使我所期望的,这意味着,示例对象被删除,刚添加的对象显示在部分内。 但是,这只是部分正确的,然后在检查Core Data Store之后,示例对象已经改变了它的属性,但并未被删除。 该行为使得应用程序在下次应用程序启动时崩溃。如果我再次启动应用程序,则示例对象在Core Data Store中显示为已删除。
这是异常消息:
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