问题标签 [nscompoundpredicate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
46 浏览

if-statement - 将嵌套的条件 If 语句转换为复杂的 NSCompoundPredicate

我正在使用 SwiftUI 为基于 iOS 的旧项目编写 macOS 目标。是一个核心数据驱动的应用程序,对于 macOS 目标,我已经使用动态 @FetchRequest 成功实现了通用列表,主要如 Paul Hudson 在他的博客中所描述的那样。

我主要通过遵循 Apple 的SwiftUI 教程并复制提供的示例代码来构建目标。

之前使用的条件 if 语句List根据 3 个 UI 控件主动过滤每个 SwiftUI。

三个 UI 控件的图像

现在我有一个使用谓词的通用 @FetchRequest,我想将此条件 if 语句转换为NSCompoundPredicate.

我将包含整个初始化程序,以便您可以看到动态@FetchRequest 是如何构建的,但它是我需要帮助的谓词...

第 3 部分中包含的代码部分工作。在之间切换FilterType.allFilterType.featured进行预期的更改,但是我正在努力为选择另一个类别的“其他”情况编写谓词 - 即 - NOT Featured,但是.lakesEITHER.rivers.mountains.

为了完整起见,我还包括了 enumCategory和 struct FilterType...

0 投票
2 回答
154 浏览

swift - 如何使用“空”谓词创建 NSCompoundPredicate

我尝试通过 NSCompoundPredicate 将多个单独的谓词组合成一个,但可能会发生一个或多个谓词未构造的情况,因为所有对象都应从 CoreData 实体中检索(因此实际上不需要谓词)。

如果未构造任何谓词,应用程序将失败。避免许多 if 子句的最佳方法是什么,我应该构造谓词从实体中检索所有对象还是有什么聪明的方法?谢谢。

0 投票
1 回答
49 浏览

ios - NSPredicate:搜索相关值的数组,NOT

我有点迷茫,希望你能帮助我。

我有两个数组

然后我有核心数据实体RockstarPerson。并且两者之间是一对多的粉丝关系。

现在我想找到几个特定的​​ Rockstar,并确保他们没有访客作为粉丝。

我尝试使用复合谓词来做到这一点,大致如下:

最后

恐怕这会导致两个问题:

  1. fanPredicate 的正确语法是什么?它适用于一个值,但它在数组上崩溃

  2. 这完全可以用复合谓词吗?我认为如果Person实体为空,我会从 CompoundPredicate 中获得零记录。

0 投票
1 回答
54 浏览

swift - 将 NSCompoundPredicate 与列表一起使用

我有一个很大的食谱清单,每个食谱里面都有一份配料清单。我想编写一个查询,该查询将返回一个包含“鸡蛋”和“黄油”的食谱列表。这是我的 CKRecord 类型中前几个食谱的快速截图。在下面的示例代码中,它没有返回任何结果,但也没有错误。

理想情况下,最好包含部分搜索,例如“egg”仍会返回包含“eggs”作为成分的食谱。如果结果会优先考虑包含“鸡蛋”和“黄油”成分的食谱,然后在食谱列表的较低优先级上会有包含“鸡蛋”或“黄油”的食谱,这会更好.and,subpredicates 查询的优先级高于 .or,subpredicates 查询。

在处理正在查询的列表列表时,我发现的其他有关 NSCompoundPredicate 的 StackOverflow 帖子在这里没有帮助(如在我的示例中,我在食谱列表中有一个列表 [成分])。

我能够使用这行代码成功返回成分中包含“黄油”或“鸡蛋”的食谱,但我希望优先考虑同时包含“鸡蛋”和“黄油”的食谱。

我感谢您的帮助!

更新

我发现,如果我只有一个子谓词,那么每个返回的食谱都只有“鸡蛋”作为第一个成分。

我确定这就是为什么我同时使用“鸡蛋”和“黄油”时返回零结果的原因,因为它们永远不会同时出现在第一种成分中。