#objective-c #core-data #ios4
#objective-c #core-data #ios4
Вопрос:
Мне нужно быстро проверить, есть ли у меня какие-то повторяющиеся значения в CoreData. Я выполняю некоторую синхронизацию в фоновом режиме, и иногда в мою систему попадает ошибка.
У меня есть ManufacturerID и ItemId, и я не могу получить повторяющееся значение для обоих, пример неверных данных:
ManufacturerID ItemID
35 IT001
35 IT001
Итак, я просто хотел бы знать, произошло ли это, и, возможно, получить список этих ItemId, тогда мне нужен способ выяснить, как избавиться от дубликатов, но это хорошее начало.
Мне просто нужен быстрый способ выяснить, существуют они или нет.
Ответ №1:
В моем приложении у меня есть SynchManager, который с помощью NSOperations выполняет синхронизацию в фоновом режиме и сохраняет новые записи в постоянном хранилище sqlite, только если они еще не сохранены. В основном то, что я делаю, это:
- выполнить запрос на выборку, который извлекает коллекции сохраненных идентификаторов (в моем случае эти идентификаторы представляют собой строки, представляющие URL-адреса)
-
перед вставкой нового объекта в хранилище я вызываю метод типа «shouldImportObject:«, который в основном проверяет, что URL-адрес еще не сохранен в базе данных. Это упрощенный пример реализации:
for (id objectID in ids) { if ([objectID isEqual:objectToImport.objectID]) { return NO; } } return YES;
Комментарии:
1. проблема в том, что мне нужно просмотреть, возможно, более 50 000 записей. Теоретически, при первом получении данных я не проверяю наличие дубликатов (это моя проблема), с этого момента я выполняю запрос на выборку, чтобы узнать, существует ли элемент, но это было бы слишком медленно при первоначальном импорте данных, кажется немного сумасшедшим и вызвало бы много операций ввода-вывода с диска.
2. Я думаю, вы только что включили для меня свет! DOH — Я могу проверить, пусто ли оно — LOL @ myself