加载核心数据获取请求的结果集

Loading the results set for Core Data fetch request

我有一个这样声明的变量:

private var theText = String()
private var aId = String()

然后我执行一个获取请求并想将其加载到该变量中:

    let predicateA = NSPredicate(format: "active == %@", true as CVarArg);
    let predicateB = NSPredicate(format: "theId == %@", aId);
    let andPredicate = NSCompoundPredicate(type: NSCompoundPredicate.LogicalType.and, subpredicates: [predicateA, predicateB]);

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext;
    let requestData = NSFetchRequest<NSFetchRequestResult>(entityName: "DataTable");
    requestData.predicate = andPredicate;

    do
    {
        let results = try context.fetch(requestData);          

        dataactivitiesid = results.first

        // let resultset = results as! [NSManagedObject];

        /* for data in results
         {
         // let testyId: Any? = (data as AnyObject).value(forKey: "testyId");
         } */
    }
    catch
    {
        print("Error in fetching data");
    }

我是否需要像上面注释的代码一样遍历结果集,或者因为我知道它只返回一行,我可以使用 .first 吗?提前致谢。

如果您只需要一项,则不需要循环。

我建议可选地将 first 的结果绑定到一个变量,如果没有找到条目,该变量可以是 nil

而且您不需要复合谓词,单个谓词可以包含与同一对象相关的多个条件。 最后这不是 Objective-C,删除尾随分号。

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext;
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "DataTable")
let predicate = NSPredicate(format: "active == TRUE AND theId == %@", aId)
fetchRequest.predicate = predicate

do {
    if let result = try context.fetch(fetchRequest).first  {      
        dataactivitiesid = result
    }

} catch {
    print(error) // print the actual error not a meaningless literal string
}