我在cellForRowAtIndexPath
方法中有以下代码。当满足某些条件时,代码用于从Core Data Store
删除对象。
我将尝试使用一个特定对象来解释我的问题:
对象的应用启动条件:
属性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
答案 0 :(得分:0)
我已经解决了删除行的问题:
NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
[context deleteObject: todoitem];
}
并将以下代码放在viewWillAppear方法中:
NSManagedObjectContext *context = self.managedObjectContext;
NSEntityDescription *entity=[NSEntityDescription entityForName:@"ToDoItem" inManagedObjectContext:context];
NSFetchRequest *fetch=[[NSFetchRequest alloc] init];
[fetch setEntity:entity];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"borrar like 'si se puede borrar'"];
[fetch setPredicate:predicate];
NSError *fetchError;
NSArray *fetchedData=[self.managedObjectContext executeFetchRequest:fetch error:&fetchError];
for (NSManagedObject *item in fetchedData){
[context deleteObject:item];
}