gpt4 book ai didi

ios - 从核心数据中删除特定对象 (Swift)

转载 作者:行者123 更新时间:2023-11-30 14:19:42 28 4
gpt4 key购买 nike

在我的核心数据实体Favorite中,我将字符串附加到其属性fav

当我根据字符串名称查找 fav 对象并尝试删除它时,它并不是删除该条目,而是设置该对象的 最喜欢=零

这是我的代码:

let managedContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext!
let favoriteFetchRequest = NSFetchRequest(entityName:"Favorite")

let predicate = NSPredicate(format: "fav == %@", "snowboarding")

favoriteFetchRequest.predicate = predicate

let fetchedEntities = managedContext.executeFetchRequest(favoriteFetchRequest, error: nil) as! [NSManagedObject]

for entity in fetchedEntities {
managedContext.deleteObject(entity)

if !managedContext.save(&error) {
println("Could not save \(error)")
}
}

当我重新运行应用程序并显示所有实体数据时,日志显示:

<NSManagedObject: 0x7fc8b0d1e4f0> (entity: Favorite; id: 0xd000000000080000 <x-coredata://8984EF48-71AF-4B87-AA59-EE5999038369/Favorite/p2> ; data: {
fav = nil;})

这又会创建一大堆nil条目,并且核心数据永远不会为空(正如我有时希望的那样)。我究竟做错了什么?如何删除整个对象?

最佳答案

每当我对 CoreData 执行任何操作时,我都会在保存之前处理所有事务。添加新的实体,保存新的实体属性等(嗯,我不应该说全部,但在大多数情况下,当我进行更新)

我不确定这是否能解决问题,但请尝试移动您的

if !managedContext.save(&error) {
println("Could not save \(error)")
}

跳出for循环,改为读取:

for entity in fetchedEntities {
managedContext.deleteObject(entity)
}
if !managedContext.save(&error) {
println("Could not save \(error)")
}

代码的其余部分看起来不错,所以这是我唯一可以明显看到的与我通常更新 CoreData 条目的方式不同的东西。让我知道这是否能解决任何问题。

编辑:您也可以在for循环之后进行一些错误调查,访问managedContextdeletedObjects属性并检查countNSSet 并查看它是否确实注册了那些要删除的对象。

关于ios - 从核心数据中删除特定对象 (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30629033/

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