Я пытаюсь сделать следующее: мне нужно ограничить количество записей основных данных до 50. Поэтому, если пользователь вводит свою 50-ю запись, приложение удаляет самую старую запись и добавляет новую запись в начало куча. Итак, в основном, если пользователь никогда не удаляет записи и если в основных данных 50 записей, то, когда пользователь пытается добавить новую запись, приложение удаляет самую старую запись и добавляет новую запись пользователя. По сути, я пытаюсь создать что-то вроде истории, но я не хочу, чтобы пользователь мог пройти более 50 записей, однако я хочу, чтобы они могли добавлять новые записи, когда их предел 50, просто отбрасывая самый старый и добавление самого нового. Как это сделать проще всего? Я новичок в основных данных и с трудом понимаю многие из них. Вот код / пример приложения, с которым я работаю. ССЫЛКА НА ПРИМЕР ПРИЛОЖЕНИЯ, КОТОРОЕ Я ИСПОЛЬЗУЮ Спасибо за помощь.
Как автоматически удалить самые старые записи основных данных при достижении лимита в 50 записей?
Ответы (2)
Допустим, у вас есть объект под названием History
. Самым простым решением было бы добавить к вашим объектам атрибут creationDate
. Затем используйте это для управления своими History
объектами.
Вам понадобится три выборки:
- Первый извлечет как ошибки все существующие
History
объекты, а затем посчитает их. Если число равно ‹50, просто добавьте новый объектHistory
и готово. - Если count> = 50, выполните получить конкретное значение и использовать оператор коллекций @max или @min (я забыл, какой именно для дат), чтобы найти самый старый
creationDate
. (Как назло, пример по ссылке - это в значительной степени именно то, что вам нужно.) - Выполните выборку объекта с
creationDate
, возвращаемым (2), и удалите его.
Затем добавьте новый объект истории.
person
TechZen
schedule
03.03.2011
Спасибо @TechZen! Для ясности даты - это не более чем инкрементное число (обычно в секундах или миллисекундах) с фиксированной контрольной даты. Таким образом, чем меньше число, тем старше дата. В этом случае OP захочет использовать
@"min:"
.
- person dooleyo; 06.08.2013
Я бы сказал, что в большинстве случаев вы бы хотели использовать modifiedDate, не так ли?
- person David van Dugteren; 24.09.2014
Хорошо, это нормально. CoreData не собирается делать это за вас, но вы можете сделать это сами.
Вы можете извлекать объекты из вашего контекста, используя NSFetchRequest
, и вы можете удалять их, используя -[NSManagedObjectContext deleteObject:]
. Вы можете отсортировать их по NSSortDescriptor
объектам.
person
Dave DeLong
schedule
03.03.2011