【问题标题】:NSPredicate execureFetchRequest not working - possibly due to spaces in stringNSPredicate execureFetchRequest 不起作用 - 可能是由于字符串中的空格
【发布时间】:2016-01-06 12:57:45
【问题描述】:

我试图在 CoreData 中搜索与 recordId 和字符串名称都匹配的对象,但它并不总能找到该对象。 例如,我搜索了一个 ID 为 1000 且名称为“The Brown Family”的对象(注意“The”和“Brown”之间的 2 个空格)。 如果我使用:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(recordId == %@") AND (name like[cd] %@)", recordId, name];

如果 recordId=1000 和 name="The Brown Family",则获取请求返回 nil。 如果我使用:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(recordId == %@"),   recordId];

如果recordId=1000,它会找到对象。如果我打印对象的 name 属性,我会得到“The Brown Family”。 因此,该对象具有正确的 id 和名称,但我的 fetchRequest 失败。 我做错了什么?

【问题讨论】:

  • 尝试正确格式化您的问题(使用代码标签)
  • 您是否有特殊原因要使用LIKE 而不是==
  • 我想我是这样写的,认为它会接受单词之间有空格的名称,并且如果 recordId 匹配,那就足够了。

标签: ios core-data nspredicate executefetchrequest


【解决方案1】:

您可能需要将值括在单引号中...

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(recordId == %@) AND (name like[cd] '%@')", recordId, name];

【讨论】:

  • 我试过了,但没有任何区别。不过感谢您的建议。
  • 我再次查看了我的结果。存储了数百个名称。我之前发现有问题的那些在名称字符串中有双空格等。然而,再看一遍,我可以看到像“托比”这样简单的东西。所以我认为空格部分是一个红鲱鱼。
  • 愚蠢的问题,如果你知道唯一的recordId(我假设它是唯一的),你为什么还要匹配名称?
  • 通常recordId就足够了。但是在某些情况下,recordId 会发生变化,例如,从设备到设备。
  • name like[cd] '%@' 错误,将只搜索逐字字符串"%@"
【解决方案2】:

抱歉,我现在知道问题所在了!我正在搜索的名称后面有一个空格。所以我一直在寻找说“Toby”,而“Toby”存储在 Coredata 中。 很抱歉浪费了大家的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2016-05-30
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多