核心数据:如何在Swift中删除具有属性的所有对象?

时间:2014-12-19 18:44:21

标签: ios core-data swift

为简单起见,我有一个名为DOWJONES的实体。 AAPL和AAPL_NSDate之外的每个对象都有两个属性。 ValueForKey:AAPL返回股票价格历史,ValueforKey AAPL_NSDate返回相应的日期。

如何在swift中快速有效地删除股票价格历史记录和相应日期? 这是我查询的方式:

var appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!

    var request = NSFetchRequest(entityName: "DOWJONES")
    request.returnsObjectsAsFaults = false
    var dowjones = context.executeFetchRequest(request, error: nil)! as [DOWJONES]
    var aapl = (dowjones as NSArray).valueForKey("AAPL") as NSArray

正如@ chris-wagner所建议的那样,我可以迭代结果并删除。

func deleteCoreDataObjects(){
    var request = NSFetchRequest(entityName: "DOWJONES")
    request.returnsObjectsAsFaults = false
    var dowjones = context.executeFetchRequest(request, error: nil)!

    if dowjones.count > 0 {

        for result: AnyObject in dowjones{
            context.deleteObject(result as NSManagedObject)
            println("NSManagedObject has been Deleted")
        }
        context.save(nil)
    }
}

2 个答案:

答案 0 :(得分:3)

您可以使用NSPersistentStoreCoordinator的{​​{1}}方法,从iOS 8开始直接批量请求到数据存储。

您可以类似于获取请求创建持久存储请求,然后使用上述方法将其传递给PSC。

但请注意,您不应该对使用此方法删除的对象进行任何上下文引用。

here有一个很好的解释。

答案 1 :(得分:2)

迭代获取请求的结果,并在每个请求上调用self.context.deleteObject(_:)