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

时间:2016-01-28 00:20:26

标签: swift core-data nsfetchrequest

我目前有一个包含两个独立实体的清单应用程序。第一个包含所有必需的项目信息(名称,组,集合,年份等),第二个包含所有用户可编辑的信息(拥有,想要等)。它们也共享一个uniqueID属性。我已经这样设置了(没有任何关系),因为我正在尝试与iCloud同步并且清单信息是大型同步的方式,所以这样我只需要同步用户可编辑的信息(更少的数据) 。这一切都在游泳。我遇到的一次打嗝如下:

我希望能够通过用户可编辑信息中的拥有(或所需)数据过滤项目信息生成的表格视图。本质上,我需要能够对用户可编辑信息执行获取请求以获取所有拥有的项,然后使用生成的数组并从具有匹配唯一ID的项实体中获取项。是否可以执行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

1 个答案:

答案 0 :(得分:1)

听起来你正在寻找NSPredicate's IN aggregate operation。如果您想要加载一组已知的标识符,则可以编写类似于

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