加载核心数据获取请求的结果集
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
}
我有一个这样声明的变量:
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
}