swift - 在 Swift 中生成跨两个没有关系的实体的获取请求

标签 swift core-data nsfetchrequest

我目前有一个包含两个独立实体的 list 应用程序。第一个包含所有必要的项目信息(名称、组、集合、年份等),第二个包含所有用户可编辑信息(拥有、想要等)。它们也共享一个 uniqueID 属性。我已经这样设置了(没有关系),因为我正在尝试与 iCloud 同步,并且 list 信息太大而无法同步,所以这样我只需要同步用户可编辑信息(数据少得多)。这一切都进展顺利。我遇到的一个问题如下:

我希望能够通过用户可编辑信息中拥有的(或想要的)数据过滤从项目信息生成的 TableView 。本质上,我需要能够对用户可编辑信息执行获取请求以获取所有拥有的项目,然后使用结果数组并从具有匹配的 uniqueID 的项目实体中获取项目。是否可以执行 fetchrequest 来匹配第一个 fetchrequest 中生成的数组中的所有项目(比较 uniqueID)?也许使用某种 for 循环?或者,更好的是某种聚合获取请求?

任何提示,我们将不胜感激!

--谢谢!编辑以包含答案代码:

我最终使用此代码从一个实体(UserEdits)创建“拥有的项目”数组

var uniqueIDs = [String]()

        if let ownedTemplate = CDHelper.shared.model.fetchRequestTemplateForName("AllOwnedItems"), let ownedRequest = ownedTemplate.copy() as? NSFetchRequest {
            do {
                if let ownedItems = try CDHelper.shared.context.executeFetchRequest(ownedRequest) as? [UserEdits] {
                    for ownedItem in ownedItems {
                        uniqueIDs.append(ownedItem.uniqueID!)
                    }
                }
            } catch {print("ERROR executing a fetch request: \(error)")}
        }

然后将该数组传递到针对较大实体(项目)的获取请求

if let template = CDHelper.shared.model.fetchRequestFromTemplateWithName("FilteredMainListOwned", substitutionVariables: ["SORT1" : lineFilter.lowercaseString, "SORT2" : uniqueIDs]) {
            let request = template as NSFetchRequest
            self.filter = request.predicate
            self.reloadFRC(request.predicate)
        }

替换表达式为:

group BEGINSWITH $SORT1
uniqueID IN $SORT2

最佳答案

听起来您正在寻找 NSPredicate's IN aggregate operation 。如果您想要加载一组已知的标识符,您可以编写如下表达式:

let ids = ["1", "2"]
NSPredicate("%K IN %@", "uniqueID", ids)

关于swift - 在 Swift 中生成跨两个没有关系的实体的获取请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35050742/

相关文章:

ios - dateFromString 对某些值返回 nil

swift - 从父类(super class)调用所有子类的函数

ios - 将 CoreData 实现到 TableView 时出现问题

objective-c - Mac OSX 应用程序 : Issue Related to NSArrayController NSTableView Core data Adding Record

iOS - 下载大数据集,检测属性值的实体(NSManagedObject)是否已经存在

swift - 排序获取的结果 Controller 数据,使用两个属性,使用排序描述符

ios - Swift 数组未附加到

iphone - 核心数据executeFetchRequest抛出NSGenericException(枚举时集合发生了变化)

ios - CloudKit/iCloud - 教师/学生场景

ios - NSManagedObjects 的动态属性在获取后为空