2016-09-22 2 views
1

Как удалить строки из CoreData, используя NSBatchDeleteRequest с NSPredicate.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 в изо-8601 –

+0

попробовать это решение http://stackoverflow.com/questions/16254575/how-do-i-get-iso-8601-date-in-ios –

+0

Большое спасибо, это мне помогло. –

Смежные вопросы