我对 Core Data 有一个奇怪的问题。问题是我正在寻找属性小于 X 的对象,并且它没有返回所有匹配的值。没有缓存,我没有使用 //[fetchRequest setFetchBatchSize:50];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"self.level <= [cd] %@", [self.filters objectForKey:@"level"]];
我将它添加到谓词的 MutableArray 中,然后执行 NSPredicate *myPredicate = [NSCompoundPredicate andPredicateWithSubpredicates: subPredicates];
这是一个返回 myPredicate 的函数,称为 preparePredicates。目前没有更多的谓词,只有一个。它的 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;
它不会出现,就像在 Core Data 中一样。但是,如果我执行 SELECT * FROM zmyentity WHERE zlevel == 6; 它出现。我真的不知道发生了什么。也许我犯了一个菜鸟错误,所以请指出我正确的方向。非常感谢您提前。