Как автоматически удалить самые старые записи основных данных при достижении лимита в 50 записей?

Я пытаюсь сделать следующее: мне нужно ограничить количество записей основных данных до 50. Поэтому, если пользователь вводит свою 50-ю запись, приложение удаляет самую старую запись и добавляет новую запись в начало куча. Итак, в основном, если пользователь никогда не удаляет записи и если в основных данных 50 записей, то, когда пользователь пытается добавить новую запись, приложение удаляет самую старую запись и добавляет новую запись пользователя. По сути, я пытаюсь создать что-то вроде истории, но я не хочу, чтобы пользователь мог пройти более 50 записей, однако я хочу, чтобы они могли добавлять новые записи, когда их предел 50, просто отбрасывая самый старый и добавление самого нового. Как это сделать проще всего? Я новичок в основных данных и с трудом понимаю многие из них. Вот код / ​​пример приложения, с которым я работаю. ССЫЛКА НА ПРИМЕР ПРИЛОЖЕНИЯ, КОТОРОЕ Я ИСПОЛЬЗУЮ Спасибо за помощь.


person 0SX    schedule 03.03.2011    source источник


Ответы (2)


Допустим, у вас есть объект под названием History. Самым простым решением было бы добавить к вашим объектам атрибут creationDate. Затем используйте это для управления своими History объектами.

Вам понадобится три выборки:

  1. Первый извлечет как ошибки все существующие History объекты, а затем посчитает их. Если число равно ‹50, просто добавьте новый объект History и готово.
  2. Если count> = 50, выполните получить конкретное значение и использовать оператор коллекций @max или @min (я забыл, какой именно для дат), чтобы найти самый старый creationDate. (Как назло, пример по ссылке - это в значительной степени именно то, что вам нужно.)
  3. Выполните выборку объекта с creationDate, возвращаемым (2), и удалите его.

Затем добавьте новый объект истории.

person TechZen    schedule 03.03.2011
comment
Спасибо @TechZen! Для ясности даты - это не более чем инкрементное число (обычно в секундах или миллисекундах) с фиксированной контрольной даты. Таким образом, чем меньше число, тем старше дата. В этом случае OP захочет использовать @"min:". - person dooleyo; 06.08.2013
comment
Я бы сказал, что в большинстве случаев вы бы хотели использовать modifiedDate, не так ли? - person David van Dugteren; 24.09.2014

Хорошо, это нормально. CoreData не собирается делать это за вас, но вы можете сделать это сами.

Вы можете извлекать объекты из вашего контекста, используя NSFetchRequest, и вы можете удалять их, используя -[NSManagedObjectContext deleteObject:]. Вы можете отсортировать их по NSSortDescriptor объектам.

person Dave DeLong    schedule 03.03.2011