获取请求错误

时间:2017-05-16 18:17:23

标签: swift core-data fetch nsfetchrequest

我已将前一个故事板中的用户输入名称保存到名为“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)")
     }

2 个答案:

答案 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