2009-08-04 2 views
0

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

SQL-магазин, с другой стороны, компилирует предикат и сортировки дескрипторов в SQL и оценивает результат в самой базе данных. Это сделано в первую очередь для производительностью баз данных гораздо быстрее в этом (это то, что они предназначены для ) бут это означает, что оценка происходит в среде без какао, и поэтому сортировать дескрипторы (или предикатов), которые полагаются на Cocoa не может работа. Поддерживаемые сортировочные селектора: сравнить: и caseInsensitiveCompare :. Обратите внимание, что кроме того, вы не можете сортировать на переходных свойствах с помощью магазина SQLite .

the documentation is here

Означает ли это, что они рекомендуют не использовать предикаты или сортировки дескрипторов при выборке управляемых объектов из SQLite магазина?

Я в настоящее время FetchRequest, где я прохожу следующее:

NSPredicate *thingSearchPredicate = 
[NSPredicate predicateWithFormat:@"label BEGINSWITH[cd] %@", searchText]; 
    NSSortDescriptor *sortDescriptor = 
[[NSSortDescriptor alloc] initWithKey:@"label" ascending:YES]; 

Поисковые работы, но я думаю, что я использую предикат, который опирается на какао. BEGINSWITH - я предполагаю сравнение: options: range: сокращение, где range - длина строки поиска. Тот факт, что это диакритическая нечувствительность, определенно, кажется, противоречит приведенному выше совету, так ли это просто означает, что они автоматически оцениваются для меня после того, как все экземпляры этого объекта были получены?

Есть ли другие способы ускорить поиск?

+1

Нет, они * не означают, что вы не можете использовать предикаты или сортировать дескрипторы с NSSQLiteStore ... только что * определенные * предикаты и дескрипторы сортировки, которые могут работать для другого хранилища, не работают с SQLLite магазин. В принципе, они должны иметь возможность компилировать их в SQL-инструкцию. BEGINSWITH [cd] может быть легко выражен в SQL. – Hunter

ответ

0

Вы увидите сообщение об ошибке, если основные данные не могут выразить ваш запрос в SQL. Документация указывает, что выражения принимаются и преобразуются в SQL и передаются в sqllite по соображениям производительности. Не то, чтобы он выродился в Cocoa, если он не может быть выражен в SQL.

То, что они имеют в виду, есть, конечно, : предикаты, не выражающиеся в SQL, так что работать не будут.

Кроме того, вам необходимо использовать их сортировщики, и вы не можете создавать свои собственные, потому что они не знают, как скрывать произвольные объекты в Cocoa до SQL.

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