Есть ли способ проверить объект NSPredicate с целью его сериализации в URL?Я пытаюсь получить данные удаленно, и мне нужно преобразовать объект предиката в URL-адрес с параметрами строки запроса, которые понимает сервер.
Это было вдохновлено выступлением в WWDC 2010 под названием «Построение опыта пользователя на сервере»«где докладчики говорят об использовании Core-Data и серверной части.Я проследил за сеансом видео и слайдов, но застрял на месте сериализации.Например, есть объект Person
, и я пытаюсь выбрать всех людей, чье имя «Джон».Я использую подкласс NSManagedObjectContext
, называемый RemoteManagedObjectContext
, который переопределяет метод executeFetchRequest
и вместо этого должен отправлять вызов на сервер.Запрос на выборку создается как (эллиптические несущественные части):
@implementation PeopleViewController
- (NSArray *)getPeople {
RemoteFetchRequest *fetchRequest = [[RemoteFetchRequest alloc] init];
NSEntityDescription *entity = ...
NSPredicate *template = [NSPredicate predicateWithFormat:
@"name == $NAME AND endpoint = $ENDPOINT"];
NSPredicate *predicate = [template predicateWithSubstitutionVariables:...];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
// the custom subclass of NSManagedObjectContext executes this
return [remoteMOC executeFetchRequest:fetchRequest error:&error];
}
@end
Теперь внутри пользовательского подкласса NSManagedObjectContext
как я могу сериализовать запрос на выборку в параметры строки запроса, подходящие для сервера.Таким образом, учитывая приведенный выше запрос на выборку, соответствующий URL будет иметь следующий вид:
http://example.com/people?name=John
Можно получить строковое представление предиката, который возвращает
name == "John" AND endpoint == "people"
, который я могу проанализироватьполучить параметры name
и endpoint
.Однако возможно ли это сделать без разбора строки?Вот частичная реализация класса RemoteManagedObjectContext
.
@implementation RemoteManagedObjectContext
- (NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error {
// this gives name == "John" AND endpoint == "people"
// don't know how else to retrieve the predicate data
NSLog(@"%@", [[request predicate] predicateFormat]);
...
}
@end