CoreData: двухуровневый fetchRequest при добавлении - PullRequest
0 голосов
/ 05 мая 2011

У меня есть базовые данные, в которых хранятся фильмы и актеры.Я получаю список фильмов через JSON.У каждого фильма есть актерский состав (актер, роль)

Так что у меня есть сущность «Кино, актер, актер».Когда я получаю список фильмов (у каждого фильма есть свой уникальный идентификатор фильма): - Извлекаю все фильмы, которые в настоящее время находятся в моей базе данных - я создаю NSSet ofistingMoviesID - я создаю NSSet newMoviesID - я делаю набор минус, чтобы получить все действительно новые фильмы- я перебираю эти новые элементы, чтобы добавить их в CoreData

Это довольно быстро, так как я делаю только один запрос на выборку.Теперь это становится очень медленным, когда я хочу добавить приведение к базе данных. Что я делаю сейчас, когда добавляю новый фильм: - получить идентификатор актера - создать FetchReqyest для этого идентификатора актера - выполнить запрос FetchRequest - если не найден, добавить нового актера,еще получить один в CoreData - я создаю ActorRole, который создает отношения между фильмом и актером

Я думаю, что это удивительно медленно, потому что я делаю одну выборку для каждого фильма. Так что я ищу лучший способдостигните этого.

Есть идеи?

Спасибо

1 Ответ

0 голосов
/ 05 мая 2011

Вы можете извлечь все существующие Actor объекты за один раз, используя оператор IN, чтобы извлечь все объекты Actor со значениями actor_ID в массиве.Вот так:

NSPredicate *P=[NSPredicate predicateWithFormat:@"actor_ID IN %@", arrayOfIdValues];

Это ускорит вашу Actor выборку, которая кажется вашим узким местом.

...