Как выполнить вычисляемый запрос с использованием CoreData - PullRequest
4 голосов
/ 09 марта 2010

У меня есть фон T-SQL, поэтому этот материал CoreData для меня немного нов.

Я создаю прототип приложения, которое в конечном итоге будет использовать бэкэнд-сервис MS SQL для запросов.

В моем бэкэнде мой запрос t-sql был бы примерно таким:

SELECT *, SQRT(SQUARE(myX - latitude) + SQUARE(myY - longitude)) Distance
FROM Locations 
WHERE latitude > myX 
AND latitude < myX + deltaX
AND longitude >  myX 
AND latitude < myY + deltaY
ORDER BY SQRT(SQUARE(myX - latitude) + SQUARE(myY - longitude))

Как мне выполнить этот же запрос в CoreData в моем прототипе, используя предикат (если это лучший метод)

N.B. это больше порядок, что я заинтересован в

1 Ответ

3 голосов
/ 09 марта 2010

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

При этом вы захотите построить NSFetchRequest с NSPredicate, и предикат будет выглядеть примерно так:

[NSPredicate predicate withFormat:@"latitude > %@ AND latitude < %@ AND 
  longitude > %@ and longitude < %@", someFloatObject1, someFloatObject2, 
  someFloatObject3, someFloatObject4];

Вы также можете добавить сортировку к NSFetchRequest, хотя вы не можете выполнять вычисления внутри сортировки. Поэтому вы можете выполнить сортировку после извлечения объектов.

обновление

Вы можете иметь временное свойство для ваших объектов, а затем иметь метод, который говорит что-то вроде '-updateDistanceCalFrom: someFloat`. Затем с массивом объектов вы можете сделать следующее:

NSArray *myFetchedArray = ...
[myFetchedArray makeObjectsPerformSelector:@(updateDistanceCalcFrom:)
                                withObject:someFloatObject];
NSSortDescriptor *calcSort = ...;
NSArray *descriptors = [NSArray arrayWithObject:calcSort];
[calcSort release], calcSort = nil;
NSArray *sortedArray = [myFetchedArray sortedArrayUsingDescriptors:descriptors];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...