簡體   English   中英

核心數據:如何在 Swift 中刪除具有屬性的所有對象?

[英]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 開始,您可以使用NSPersistentStoreCoordinatorexecuteRequest(_ request: NSPersistentStoreRequest, withContext context: NSManagedObjectContext, error error: NSErrorPointer)方法直接在數據存儲上執行批處理請求。

類似於獲取請求,您可以創建持久存儲請求,然后使用上述方法將其傳遞給 PSC。

但是請注意,您不應該對使用此方法刪除的對象有任何上下文引用。

有它的一個很好的解釋在這里

迭代獲取請求的結果,並對每個結果調用self.context.deleteObject(_:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM