我已将前一个故事板中的用户输入名称保存到名为“name”的实体“UserInfo”下的xcdatamodel中。我正在尝试在下一个故事板中获取它以显示在标签中以迎接用户。我收到错误“无法使用类型为'(entityName:String,attributeName:String)的列表的参数调用类型'NSFetchRequet'的初始化程序'”
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
//getting the managed context where the entity we need is
let managedContext = appDelegate.persistentContainer.viewContext
//make fetch request
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "UserInfo", attributeName: "name")
//try to fetch the entity we need, else print error
do {
Username = try managedContext.fetch(fetchRequest)
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
答案 0 :(得分:0)
NSFetchRequest
没有初始化程序接受参数attributeName:
,就像错误所说的那样。您的选项为NSFetchRequest(entityName:)
或NSFetchRequest()
。
如有疑问,请在API参考中查找该类,以确保您了解如何使用它。
答案 1 :(得分:0)
NSFetchRequest
没有初始化程序entityName:attributeName
,您必须使用
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "UserInfo")
fetch
总是返回一个数组。如果实体中只有一条记录,请获取第一项和属性name
的值:
do {
let users = try managedContext.fetch(fetchRequest)
if let user = users.first {
Username = user.value(forKey: "name")
}
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
如果有多条记录,您可以应用谓词。
不要guard
AppDelegate
。如果此类不存在,则应用程序甚至不会启动。感叹号是安全的,可以。
let appDelegate = UIApplication.shared.delegate as! AppDelegate