从Core Data中删除记录

时间:2014-07-15 15:33:01

标签: ios objective-c uitableview core-data

我无法从Core Data SQlite文件中删除记录,当我从tableview中删除一行时,我希望能够从我的文件中删除相应的记录

以下是我将所有记录提取到allContacts数组后所做的事情

NSManagedObject *contactRecord = [allContacts objectAtIndex:arc4random() % allContacts.count];
self.managedObjectID = [contactRecord objectID];

然后调用我的方法来准备我的联系人,然后在tableview上显示它们

当我从表中删除一行时,我称之为

-(void)deleteContactFromFile:(contact *)deletedContact
{
NSLog(@"deleted Contact %@",deletedContact.personID);
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = appDelegate.managedObjectContext;
[context deleteObject:[context objectWithID:self.managedObjectID]];
[context save:nil];
}

有趣的是我从我的核心数据文件中删除了一个随机记录,但不是我选择的那个。我不知道如何处理ObjectID删除特定NSManagedObject

的内容

如果我的问题不够明确,请告诉我澄清更多。

2 个答案:

答案 0 :(得分:0)

您应该使用NSFetchedResultsController。它将帮助您将表视图的每个索引路径与特定的托管对象相关联。然后,您无需获取所有数据并通过它们进行过滤。

例如,如果您有索引路径和获取的结果控制器,那么就像

一样简单
NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSManagedObjectContext *context = object.managedObjectContext;
[context deleteObject:object]; 
[context save:nil]; 

请注意,您无需转到应用委托以获取托管对象上下文。

答案 1 :(得分:-1)

试试这个:

- (void)deleteContactFromFile:(contact *)deletedContact {
    NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
    NSFetchRequest *fetchRequest = [NSFetchRequest new];
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:context]];
    NSError *error;
    NSArray *rootArray = [context executeFetchRequest:fetchRequest error:&error];
    for (NSManagedObject *object in rootArray) {
        if ([context objectWithID:self.managedObjectID]) {
            [context deleteObject:object];
        }
    }
}