在我的核心数据实体Favorite
中,我将字符串附加到其属性fav
。
当我根据字符串名称查找fav
对象并尝试删除时,它不会删除该条目,而是设置该对象' s {{ 1}}
这是我的代码:
fav = nil
当我重新运行应用程序并显示所有实体数据时,日志显示:
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;})
条目,核心数据永远不会为空(因为我有时会喜欢它)。我究竟做错了什么?如何删除整个对象?
答案 0 :(得分:0)
每当我对CoreData
做任何事情时,我都会在保存之前处理所有交易。添加新的Entities
,保存新的Entity
属性等等(好吧,我不应该说所有,但在大多数情况下,当我做一个时更新)
我不确定这是否可以修复它,但尝试移动
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
循环之后进行一些小错误调查,访问managedContext
的{{1}}媒体资源并查看deletedObjects
count
并查看它是否实际注册了要删除的对象。