2009-10-27 3 views
2

У меня есть сущность с отношением числа ко многим. Я представляю определенные свойства объекта в виде таблицы, используя NSFetchedResultsController. Из всех отношений, которые имеет сущность, отображаются значения только одного из отношений (они в настоящее время сбой в методе cellforrowat ...). Мне кажется, что это может повлиять на производительность. Возможно ли выявить конкретную взаимосвязь во время создания запроса Fetch, чтобы CoreData не приходилось извлекать значения при прокрутке таблицы?Неисправность отношения CoreData при извлечении основного объекта

ответ

2

Я не уверен, что я понимаю модель данных, которую вы описываете. Если в качестве содержимого строк таблицы отображаются только члены одной из сторон своих связей, то вы можете отображать только свойства, отображаемые в каждой из видимых строк, используя -setPropertiesToFetch: по вашему запросу на выборку, например, в следующий пример:

NSArray *propertiesToFetch = [[NSArray alloc] initWithObjects:@"title", @"thumbnailImage", nil]; 
[fetchRequest setPropertiesToFetch:propertiesToFetch]; 
[propertiesToFetch release]; 

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

1

Вы можете вручную скомпрометировать объекты, но я не думаю, что вы что-то выиграете. Независимо от того, виноваты ли вы во всех объектах сразу или по какой-либо причине вы по очереди, по мере необходимости каждый объект по-прежнему будет ошибочен в отдельности.

Я написал приложения, которые выполняют именно то, что вы описали, сбой в большом количестве данных для отображения в виде таблицы и никогда не замечали снижения производительности. Помните, что будут обнаружены только объекты, соответствующие отображаемым ячейкам таблицы.

В целом, я бы сказал, не пытайтесь перехитрить Core Data. На данный момент у него есть годы оптимизации производительности. Хотя интуитивно может показаться, что ошибка в 100 объектах потребует 100 запросов к базе данных, это не обязательно так.

2

Во-первых, я бы не стал предполагать, что поведение основных данных по умолчанию менее реалистично, чем предлагаемый вами подход: без данных для резервного копирования ваших усилий оптимизация почти наверняка пойдет наперекосяк.

Это, я считаю, -[NSFetchRequest setRelationshipKeyPathsForPrefetching:] выполнит то, что вы хотите.

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