Ios NSFetchRequest无法获取上下文中存在的实体

Ios NSFetchRequest无法获取上下文中存在的实体,ios,core-data,nspredicate,nsfetchrequest,Ios,Core Data,Nspredicate,Nsfetchrequest,我在上下文中插入实体时遇到问题。插入所有实体A后,我立即在上下文上执行一个获取请求: NSEntityDescription* entity = [NSEntityDescription entityForName:@"A" inManagedObjectContext:ctx]; NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init]; [fetchRequest setEntity:entity]; NSError* fetc

我在上下文中插入实体时遇到问题。插入所有实体A后,我立即在上下文上执行一个获取请求:

NSEntityDescription* entity = [NSEntityDescription entityForName:@"A" inManagedObjectContext:ctx];
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
NSError* fetchError;
NSArray* results = [ctx executeFetchRequest:fetchRequest error:&fetchError];
上面的代码能够获得所有这些,我可以在NSLog中看到它们

在同一上下文中,我尝试获取年龄为5的所有实体A,如下所示: (我将“年龄”指定给attirbute,将NSString@“5”指定给值)

问题是,即使NSLog显示的是一个年龄为5岁的实体A,但最后一次获取请求总是返回null!没什么

有什么建议吗?为什么在同一个上下文中,获取所有数据都会显示年龄为5岁的实体,而只对年龄为5岁的实体进行过滤是不起作用的


感谢

尝试将年龄设置为NSNumber实例的初始值为5,而不是NSString@“5”。

尝试将年龄设置为NSNumber实例的初始值为5,而不是NSString@“5”。

模型中的年龄是什么类型?NSNumber(整数64),另外,我刚刚发现如果我硬编码谓词为@“age==5”,那么它就可以工作。我现在很困惑。带字符串参数的%@为字符串比较插入引号。如果数据不是字符串,它将不会比较。。。这就是为什么我问这个类型…模型中的年龄是什么类型?NSNumber(整数64),而且,我刚刚发现,如果我硬编码谓词为@“age==5”,那么它就工作了。我现在很困惑。带字符串参数的%@为字符串比较插入引号。如果数据不是字符串,它将不会比较。。。这就是为什么我问这个类型…有效。该死,所以,我想我可以在NSPredicate中提供一个字符串。。。我想,因为年龄是一个NSN数字,所以你的建议是可行的,但是,你能不能给我一个提示,为什么在这种情况下我不能传递NSString?我错过了什么?谢谢当您将字符串作为参数传递给谓词时,它会自动将其转换为带引号的“字符串”,这与值5.5不符。该死,所以,我想我可以在NSPredicate中提供一个字符串。。。我想,因为年龄是一个NSN数字,所以你的建议是可行的,但是,你能不能给我一个提示,为什么在这种情况下我不能传递NSString?我错过了什么?谢谢当您将字符串作为参数传递给谓词时,它会自动将其转换为带引号的“字符串”,这与值5不符。
NSEntityDescription* entity = [NSEntityDescription entityForName:@"A" inManagedObjectContext:ctx];
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
NSPredicate *filter = [NSPredicate predicateWithFormat:@"%K == %@",attr,value];
[fetchRequest setPredicate:filter];
NSError* fetchError;
NSArray* results = [ctx executeFetchRequest:fetchRequest error:&fetchError];