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

时间:2015-06-03 19:32:43

标签: ios swift core-data

在我的核心数据实体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;}) 条目,核心数据永远不会为空(因为我有时会喜欢它)。我究竟做错了什么?如何删除整个对象?

1 个答案:

答案 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并查看它是否实际注册了要删除的对象。