【问题标题】:How to fetch CoreData result for only selected row in swift 5?如何在swift 5中仅获取选定行的CoreData结果?
【发布时间】:2019-12-18 22:48:36
【问题描述】:

如何获取类似于 SQL SELECT * FROM user where username="something" 中的 CoreData 值

let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let db = appDelegate.persistentContainer.viewContext
    let request : NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "User")
    let predicate = NSPredicate(format: "username='\(usernameLabel.text!)'")
    request.predicate = predicate

    do{
        let result = try db.fetch(request) as! [NSManagedObject]
        var get_email : String = ""

        for item in result {
            if let email = (item as AnyObject).value(forKey: "email") as? String {
                get_email.append(email)
            }

        }
        emailTextField.text = get_email

    }
    catch let error as NSError{
        print(error)
    }

在上面的代码中,输出将类似于tester1@tester.comtester2@tester.com 它实际上获取整个电子邮件列。

【问题讨论】:

  • 您确定用户名字段是唯一的吗?您最好在谓词中使用占位符而不是字符串插值,否则它看起来基本上没问题。
  • @StephenDarlington 哦,谢谢。我想我有问题。我忘记在注册页面上进行重复检查
  • 拜托,(item as AnyObject).value(forKey: "email") as? String 的语法太可怕了。注解获取请求NSFetchRequest&lt;User&gt;,删除as! [NSManagedObject]得到字符串值if let email = item.email

标签: ios swift core-data swift5


【解决方案1】:

您的谓词看起来不错(嗯,您最好使用占位符而不是字符串插值)所以最可能的问题是用户名字段不是唯一的。

【讨论】:

    猜你喜欢
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多