【问题标题】:Core Data - Fetch Request results not matching the predicate核心数据 - 获取请求结果与谓词不匹配
【发布时间】:2023-03-18 05:52:02
【问题描述】:

我很困惑为什么以下方法不起作用:

正如您在调试控制台中看到的那样,newerContentAvailable 的值是 0,尽管我只想要将此值设置为 1 的对象。但它还是进入了结果。

是的,我正在使用 MagicalRecord,但怀疑这与它有什么关系。这是一个旧的、成熟的代码库,MR_findAllWithPredicate:... 只是在该数据模型上创建一个 fetch 请求并设置 fetch 的谓词。

我对 Core Data 有什么不明白的地方吗?我承认它是一个框架的野兽,并且缺乏最佳实践。

非常感谢您的帮助!

【问题讨论】:

  • 尝试更改 newerContentAvailable 属性的名称 - 我有一个模糊的回忆,CoreData 被以“新”开头的属性绊倒。
  • 这似乎已经解决了!愿意为此写一个答案,我会赞成吗?
  • 很高兴对它进行了排序。很奇怪吧?我会添加一个答案,谢谢。

标签: ios core-data nspredicate magicalrecord


【解决方案1】:

NSNumber 的 NSNumber 值在与 %@ 格式一起使用时不会被替换。您必须获得返回正确类型的 intValue 或 floatValue(doubleValue 等)。

谓词应该是,

NSPredicate *findPred = [NSPredicate predicateWithFormat:@"newerContentAvailable == 1"];

NSNumber *number = @1; //Or any other number
NSPredicate *findPred = [NSPredicate predicateWithFormat:@"newerContentAvailable == %d", [number intValue]];

【讨论】:

  • 不。没用。另外,如果我要查询标量类型,我不会放 newerContentAvailableValue 吗?我多年来一直像在 OP 中那样做,从来没有问题。标量类型实际上是一个 BOOLEAN,所以使用 @YES 也不起作用。
【解决方案2】:

我认为问题可能是您使用的属性名称造成的:以new... 开头的名称似乎会导致一些意外行为(*)。尝试更改属性名称以查看是否排序。

(*) 参见例如this question and answer

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    相关资源
    最近更新 更多