删除cellForRowAtIndexPath方法中的核心数据对象

时间:2014-02-14 18:40:31

标签: ios core-data

我在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

1 个答案:

答案 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];
    }