从 Core Data 中删除记录

Posted

技术标签:

【中文标题】从 Core Data 中删除记录【英文标题】:Deleting a record from Core Data 【发布时间】:2014-07-15 15:33:01 【问题描述】:

我在从 Core Data SQLite 文件中删除记录时遇到问题。当我从表格视图中删除一行时,我希望能够从我的文件中删除相应的记录。

这是我将所有记录提取到 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 的事情。

如果我的问题不够清楚,请告诉我进一步澄清。

【问题讨论】:

“我从核心数据文件中删除了一条随机记录,但没有删除我选择的记录”。但是你随机选择一个!您的第一个代码 sn-p 使用 arc4random 选择您稍后删除的代码。如果您是随机选择一个,那么随机删除一个不是您所期望的吗? 【参考方案1】:

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

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

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

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

【讨论】:

感谢您向我指出那门很棒的课程。它让生活变得更加轻松。哈哈,我必须仔细阅读它,看看我还能用它做什么【参考方案2】:

试试这个:

- (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];
        
    

【讨论】:

以上是关于从 Core Data 中删除记录的主要内容,如果未能解决你的问题,请参考以下文章

从 .Xdf 文件中删除重复记录

使来自Core Data中API的本地缓存数据无效

Core Data的使用备

删除记录时出现 NO_SQL_DATA 错误,firedac,delphi 10.3.1

如何从 Core Data 中删除数据

从 Core Data 中的 NSOrderedSet 中删除项目