2010-11-10 5 views
1

У меня есть база данных CoreData, полная объектов, которые связаны друг с другом.CoreData: эффективный способ извлечения и связывания объектов

EntityFoo - атрибут: UniqueID, отношения: один-ко-многим другим объектам EntityFoo, отношения: один-к-многим другим EntityUnresolvedRelationship объекты

EntityUnresolvedRelationship - атрибут: UniqueID, inverseRelationship: назад к объекту EntityFoo

Когда приложение для iPhone запускается, я получаю информацию об этих объектах из веб-службы. Я анализирую ответ веб-службы и создаю объекты Foo. В то время, когда я загружаю и разбираю данные и помещаю объекты Foo в CoreData, я не хочу тратить время, чтобы найти другие объекты EntityFoo, которые должны быть связаны с этим объектом, и вполне вероятно, что у меня пока нет объект Foo, чтобы связать еще, если он еще не был загружен и проанализирован, поэтому я быстро создаю объект UnresolvedRelationship для отношений и сохраняю в нем уникальный идентификатор, чтобы впоследствии разрешить отношения для этого объекта.

Теперь я пытаюсь найти наиболее эффективный способ пройти через все объекты Foo или UnresolvedRelationship и создать правильные отношения CoreData между всеми объектами Foo. Другими словами, в конечном итоге я не хочу иметь объекты UnresolvedRelationship ... это было просто временным ... объекты Foo будут иметь отношения только друг к другу.

Там может быть 15 000 плюс объекты Foo.

Есть ли хороший способ получить все объекты Foo и все объекты UnresolvedRelationship таким образом, что я могу пройти один из массивов и быстро найти соответствующий объект в другом массиве с помощью его уникального идентификатора, чтобы я мог настроить отношения CoreData?

Во всяком случае, хотелось бы, чтобы любые указатели.

ответ

2

Вы должны делать это как часть анализа данных, поступающих из веб-службы. Это будет самый эффективный способ сделать это. То, как вы приближаетесь к этому, заключается в том, что вы считаете, что поиск отношений будет медленным. Это плохой подход к оптимизации.

Извлечение объектов и их привязка не будут медленными, если вы не заставите их реализовать (сбой) в памяти. Если вы нарушаете объекты 15K, в любом случае все равно будет медленным.

Настройте свои отношения во время разбора, эффективно используйте пулы автозаполнения во время разбора и сбрасывайте свой контекст с постоянными интервалами во время разбора, чтобы сохранить память. Это лучший вариант.

+0

Спасибо, Маркус. Я не могу разрешить все отношения во время разбора, потому что я еще не знаю обо всех объектах, которые мне нужно связать. Из-за этого кажется, что это двухэтапный процесс: вытащить все объекты, а затем настроить все отношения. Мой текущий подход к разрешению состоит в том, чтобы извлечь все объекты и поместить их в словарь поиска на основе uniqueId. Затем я извлекаю все неразрешенные объекты и прохожу их и настраиваю отношения. Я удаляю временные объекты, когда я иду, и сохраняю изменения в конце. – toofah

+0

Сохраняете ли вы объекты перед выполнением этих отношений? –

+0

Да. Во время операции загрузки и разбора я тщательно управляю памятью с помощью пула автозаполнения, как вы предлагаете, и я сохраняю объекты в постоянном хранилище, когда я иду. – toofah

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