我总是在代码中创建我的NSFetchRequests。现在我正在寻找Xcode GUI来构建一个获取请求并将其存储在模型中。
我正在关注Xcode文档中的一个示例。我向模型添加了一个获取请求,并且通过Modeling GUI创建的谓词是:
firstName LIKE[c] "*SUBSTRING*"
然后我用这两行检索该请求:
NSDictionary *substituionDictionary = [NSDictionary dictionaryWithObject:@"woody" forKey:@"SUBSTRING"];
NSFetchRequest *fetchRequest = [mom fetchRequestFromTemplateWithName:@"firstNameContains" substitutionVariables:substituionDictionary];
生成的NSFetchRequest的NSLog输出:
(entity: Customer; predicate: (firstName LIKE[c] "*SUBSTRING*"); sortDescriptors: (null); limit: 0)
..表示在返回存储的FetchRequest之前未替换变量。
那么,如何指定在Xcode数据建模获取请求谓词生成器GUI中输入的文本将在运行时由NSFetchRequest替换:fetchRequestFromTemplateWithName:substitutionVariables:?
谢谢!
伍迪
您需要右键单击包含预期变量的获取请求谓词编辑器的行,然后从弹出窗口中选择“VARIABLE”。右键单击的位置有时在Xcode编辑器中挑剔,所以我倾向于单击+/-按钮的左侧。
以下是替换变量的示例。
首先在获取请求部分中创建fetchRequest模板。
然后用firstName编写fetch employee的代码。
func employeeByFirstName(fName: String) -> [Employee]{
let viewContext = self.persistentContainer.viewContext
var substitutionVariables: [String: Any] = [String : Any]()
substitutionVariables["FIRSTNAME"] = fName
let fetchRequest = fetchRequestBy(name: "fetchByFirstName", variables: substitutionVariables) as! NSFetchRequest<Employee>
do {
let objects = try viewContext.fetch(fetchRequest)
return objects
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
func fetchRequestBy(name: String, variables: [String : Any]) -> NSFetchRequest<NSFetchRequestResult>? {
let model = self.persistentContainer.managedObjectModel
let fetchRequest = model.fetchRequestFromTemplate(withName: name, substitutionVariables: variables)
return fetchRequest
}