(NSXMLParserの一部として)変数を使用して述語に基づいてオブジェクトを取得しようとするメソッドを作成しようとしています。コードは次のようになります。コアデータ述語の要素名に変数を使用する
は、私はクラスで定義されたこれらの変数を持っている:
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) NSString *model;
@property (strong, nonatomic) NSString *element;
は今の方法で、私はこのような要求に設定:今
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:self.model inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
挑戦を - 私はが行うことができるようにしたいは次のとおりです。
// DOES NOT WORK
[request setPredicate:[NSPredicate predicateWithFormat:@"%@ == %@", self.element,string]];
B utは結果を返しません。
if ([self.element isEqualToString:@"name"]) {
[request setPredicate:[NSPredicate predicateWithFormat:@"name == %@", string]];
}
これは私のself.element
が正しく設定されている(?と思う)が、述語式の左辺を好きではないと言われます:いくつかの周りいじくる後、私はこのが作業を行うことに気付きます変数である。
私も試してみました:
[request setPredicate:[NSPredicate predicateWithFormat:@"%s == %@", [self.element UTF8String],string]];
...おそらくそれは、文字列を好ん場合だけ見るために。私はその仕事をすることもできませんでした。
私が試みていることは可能ですか?私はコアデータのドキュメントのできるだけ多くを読んできましたが、このようなサンプルコードを見つけることはできませんが、それが不可能であったとは言いませんでした。
EDIT: となりました作業コードは:あなたが前に行っていない場合は
は[request setPredicate:[NSPredicate predicateWithFormat:@"%K == %@", self.element,string]];
これは完璧です、ありがとうございます。私のコードを動作させる情報の特定の部分は、引数を値ではなくキーとして扱う%K変数です。今働いている=) – valdarin
あなたは大歓迎です:)コアデータと述語はすばらしい技術であり、あなたはそれらですべてを行うことができます... – matteodv