2016-09-22 71 views
1

如何使用NSBatchDeleteRequest和NSPredicate从CoreData中删除行。NSBatchDeleteRequest与NSPredicate在swift中

我想删除超过30天的记录。

我不想获取内存中的所有数据并比较和删除,我想使用NSBatchDeleteRequest,就像我们在NSBatchUpdateRequest中做的那样。

这是迄今为止我已经写

let date = NSDate(); let yesterday = date.dateByAddingTimeInterval(-24*60*60); let predicate = NSPredicate(format: "date > %@", yesterday); 
    let fetchRequest = NSFetchRequest(entityName: "Notification"); 
    let batchDelete = NSBatchDeleteRequest(fetchRequest: fetchRequest) 

请给予解答在迅速

回答

1

这是简单的例子代码。可以使用NSPredicate来丰富您的请求。

let calendar = NSCalendar.currentCalendar() 

let thirtyDaysAgo = calendar.dateByAddingUnit(.Day, value: -30, toDate: NSDate(), options: []) 

let fetchRequest = NSFetchRequest(entityName: "Notification") 

fetchRequest.predicate = NSPredicate(format: "(date >= %@)", thirtyDaysAgo) 

let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest) 

do { 
    try context.executeRequest(deleteRequest) 
    try context.save() 
} catch { 
    print (error) 
} 
+0

如何转换是thirtyDaysAgo为ISO-8601 –

+0

尝试此解决方案http://stackoverflow.com/questions/16254575/how-do-i-get-iso-8601-date-in-ios –

+0

非常感谢,这对我有帮助。 –