#core-data #linked-list #predicate
#core-data #связанный список #предикат
Вопрос:
Есть ли способ сформулировать предикат основных данных для данного объекта, представляющего начало односвязного списка и все остальные объекты в этом списке?
Например, у меня есть объекты, каждый из которых имеет отношение к другому объекту (скажем, nextObject
), и я хочу предикат для указанного объекта и всех других объектов, достижимых путем обхода nextObject
(пока это не будет nil
сделано).
УТОЧНЕНИЕ:
Я использую их для UITableView
‘s NSFetchedResultsController
, поэтому они должны быть частью выборки, а не чем-то, что я повторяю в коде.
Ответ №1:
Вы бы не стали использовать предикат для связанного списка. Вместо этого вы бы просто начали с первого интересующего объекта и переходили по взаимосвязям, вызывая nextObject
, пока не наткнетесь на тот, у которого не было nextObject
значения.
Вы можете найти первый и последний объекты с предикатом в выборке, просто выполнив поиск previousObject==nil
и nextObject==nil
.
Предикаты не понимают произвольно длинных цепочек отношений. Они понимают цепочку как enity1.entity2.entity3
но не nextObject.nextObject.nextObject...
, потому что у них нет способа узнать, когда остановиться.
Комментарии:
1. Извините, я не был ясен в своем первоначальном вопросе: я использую их для NSFetchedResultsController UITableView, поэтому они должны быть частью выборки, а не чем-то, что я повторяю в коде.
2. Предикаты вычисляются в логические выражения, поэтому вы действительно не можете получить утверждение true или false о связанном списке. Порядок произвольный, поэтому проверять нечего. nextObject — это просто nextObject.