URL にシリアル化する目的で NSPredicate オブジェクトを検査する方法はありますか? リモートでデータを取得しようとしており、述語オブジェクトを、サーバーが理解できるクエリ文字列パラメーターを持つ URL に変換する必要があります。
これは、WWDC 2010 で行われた「Building a Server Driven User EXperience」と呼ばれる講演に触発されたもので、講演者は Core-Data とサーバー バックエンドの使用について話しています。セッションのビデオとスライドをたどりましたが、連載のポイントで立ち往生しています。たとえば、Person
オブジェクトがあり、名前が「John」であるすべての人を取得しようとしています。メソッドをオーバーライドするNSManagedObjectContext
calledのサブクラスを使用しており、代わりに呼び出しをサーバーに送信することになっています。フェッチ リクエストは次のように作成されます (省略された重要でない部分):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