[英]Core Data: How do I delete all objects with an attribute in 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)
}
}
從 iOS 8 開始,您可以使用NSPersistentStoreCoordinator
的executeRequest(_ request: NSPersistentStoreRequest, withContext context: NSManagedObjectContext, error error: NSErrorPointer)
方法直接在數據存儲上執行批處理請求。
類似於獲取請求,您可以創建持久存儲請求,然后使用上述方法將其傳遞給 PSC。
但是請注意,您不應該對使用此方法刪除的對象有任何上下文引用。
有它的一個很好的解釋在這里。
迭代獲取請求的結果,並對每個結果調用self.context.deleteObject(_:)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.