gpt4 book ai didi

ios - 核心数据对象不会被删除

转载 作者:行者123 更新时间:2023-12-01 18:18:42 25 4
gpt4 key购买 nike

我有一个 UItableView,我在其中显示项目列表。您可以选择和取消选择此项目列表。

当用户从 tableview 中选择一个项目时,我将该字典添加到我的 coredata

当用户从 tableview 中取消选择一个项目时,我会从我的 coredata 中删除该字典。

在这方面,每件事都很好,因为我在每次选择和取消选择时记录 coredata 对象,所以如果我选择了它们,我可以看到有 1 2 或 3 个项目,然后如果我取消选择项目 3,它只记录 1 和 2。

所以我知道这些功能运行良好。现在我实现的下一个问题是当 tableview 显示时,我检查我的 coredata 中是否有任何项目,然后当我找到与当前单元格相关的项目时,我添加了一个辅助刻度。这是为了显示您已经将哪些值保存到核心数据中。

现在奇怪的是,以前我从 coredata 中删除了第 3 项,并通过读取 coredata 值并看到仅存在 1 和 2 来确认它。然后重建应用程序以检查并确保该功能正常工作,该功能在 View 加载时分配滴答声。一旦 View 加载项目 1 2 和 3 都再次被选中.....即使 3 不应该。

我不确定我做错了什么,但这是我在取消选择时调用的核心数据删除功能

// Deleting values/tables from coredata entity
- (void)deleteSingleObject:(NSString *)entityDescription Dictionary:(NSDictionary *)dictionary {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityDescription inManagedObjectContext:__managedObjectContext];
[fetchRequest setEntity:entity];

NSString *projectIDString = [dictionary objectForKey:@"ProjectID"];
NSPredicate *p=[NSPredicate predicateWithFormat:@"projectID == %@",projectIDString];
[fetchRequest setPredicate:p];


NSError *error;
NSArray *items = [__managedObjectContext executeFetchRequest:fetchRequest error:&error];

for (NSManagedObject *product in items) {
[__managedObjectContext deleteObject:product];
}

}

这就是我在 View 加载时分配刻度的方式
// check if cell needs accessorytick
for (int i = 0; i < [projectListReadFromCoreDataMutableArray count]; i++) {
NSDictionary *tempReadCoreDataDictionary = [projectListReadFromCoreDataMutableArray objectAtIndex:i];
if ([[tempReadCoreDataDictionary objectForKey:@"ProjectID"] isEqualToString:[projectDictionary objectForKey:@"ProjectID"]]) {
projectListCustomCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
}

任何帮助将不胜感激。
如果您需要更多信息或代码,请告诉我,但这是我认为无法正常工作的两个核心部分。

最佳答案

您正在从托管对象上下文中删除该对象,但您永远不会将此类修改保存到持久存储中。

引用 documentation

Just as a new object is not saved to the store until the context is saved, a deleted object is not removed from the store until the context is saved



这就是为什么当您重新加载应用程序时对象会再次出现的原因。

您必须将 MOC 保存到持久存储中才能使删除永久化,即类似于
NSError *error = nil;
if (![_managedObjectContext save:&error]) {
// handle error
}

关于ios - 核心数据对象不会被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19062047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com