Вы можете использовать NSBatchDeleteRequest
доступно для iOS 9.0+
, macOS 10.11+
, tvOS 9.0+
, watchOS 2.0+
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"expires < %i", dateInt];
NSFetchRequest *fetchRequest = [News fetchRequest];
[fetchRequest setPredicate:predicate];
// Create batch delete request
NSBatchDeleteRequest *deleteReq = [[NSBatchDeleteRequest alloc] initWithFetchRequest:fetchRequest];
NSError *error = nil;
NSBatchDeleteResult *deletedResult = [appDelegate.persistentContainer.viewContext executeRequest:deleteReq error:&error];
if (error) {
NSLog(@"Unable to delete the data");
}
else {
NSLog(@"%@ deleted", deleteReq.result);
}
Код Swift (по ссылке выше)
let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Employee")
fetch.predicate = NSPredicate(format: "terminationDate < %@", NSDate())
let request = NSBatchDeleteRequest(fetchRequest: fetch)
do {
let result = try moc.execute(request)
} catch {
fatalError("Failed to execute request: \(error)")
}
Примечание:
Я нашел ниже комментарий о execute
из moc
Метод передачи запроса в хранилище без влияния на содержимое контекста управляемого объекта.
Это означает, что любые несохраненные данные в moc
не будут затронуты. то есть, если вы создали / обновили объект, который соответствует критериям запроса на удаление и не вызывали save
для moc
, тогда этот объект не будет удален.