【问题标题】:NSFetchRequest canot fetch entity present in contextNSFetchRequest 无法获取上下文中存在的实体
【发布时间】:2012-04-15 04:48:36
【问题描述】:

我在上下文中插入实体 A 时遇到问题。在我插入所有实体 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,如下所示: (我将“年龄”分配给属性,并将 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];

问题是,即使 NSLog 显示了一个年龄为 5 岁的实体 A,这个最后的 fetch 请求总是返回 null!什么都没有。

有什么建议吗?为什么在同一上下文中获取所有这些显示年龄为 5 的实体并仅过滤年龄为 5 的实体不起作用?

谢谢

【问题讨论】:

  • 模型中的年龄是什么类型?
  • NSNumber (Integer 64) ,另外,我刚刚发现如果我将谓词硬编码为 @"age == 5" 那么它就可以工作。我现在很困惑。
  • 带有字符串参数的 %@ 插入引号以进行字符串比较。如果数据不是字符串,它不会比较...这就是为什么我问类型...

标签: ios core-data nspredicate nsfetchrequest


【解决方案1】:

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

【讨论】:

  • 工作。该死,所以,我认为我总是可以在 NSPredicate 中提供一个字符串......我想因为年龄是一个 NSNumber,所以你的建议有效是有道理的,但是,你能给我一个提示,为什么我不能只是在这种情况下传入一个 NSString ?我在这里想念什么?谢谢!!
  • 当您将字符串作为参数传递给谓词时,它会自动将其转换为带引号的“字符串”,而不是与值 5 进行比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多