CoreDataで奇妙な問題が発生しています。問題は、プロパティがX未満のオブジェクトを探しているのに、一致するすべての値が返されないことです。キャッシュがなく、// [fetchRequest setFetchBatchSize:50]を使用していません。
NSPredicate *pred = [NSPredicate predicateWithFormat:@"self.level <= [cd] %@", [self.filters objectForKey:@"level"]];
それを述語のMutableArrayに追加し、後でNSPredicate * myPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];を実行します。
これは、preparePredicatesと呼ばれるmyPredicateを返す関数内にあります。今のところ、これ以上の述語はなく、1つだけです。NSLogが返すのは:level <=[cd]"30"です。文字列のintValueと%iでも試してみました。主な関数は次のとおりです。
NSError* error;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"myEntity"
inManagedObjectContext:self.context];
[fetchRequest setEntity:entity];
NSPredicate* predicate = [self preparePredicates];
[fetchRequest setPredicate:predicate];
//[fetchRequest setFetchBatchSize:50];
NSArray *fetchedObjects = [self.context executeFetchRequest:fetchRequest error:&error];
NSLog (@"Error: %@", error);
NSLog(@"los fetchedobjects: %i",[fetchedObjects count]);
return fetchedObjects;
エラーは返されません。結果を見ると、レベル6のものはありませんが、一致するものは他にもあります(すべて指定された値よりも小さい)。レベル6のものがあることは知っています。SQLiteデータベースブラウザで.sqliteを開くと、そこに表示されます。私がこのプログラムでやるなら
SELECT * FROM zmyentity WHERE zlevel <30;
CoreDataと同じように表示されません。しかし、SELECT * FROM zmyentity WHERE zlevel==6を実行すると; 現れる。何が起こっているのか本当にわかりません。ルーキーのミスをしているのかもしれませんので、正しい方向に向けてください。事前にどうもありがとうございました。