首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取保存的对象数

如何获取保存的对象数
EN

Stack Overflow用户
提问于 2018-08-03 02:31:37
回答 1查看 39关注 0票数 0

我创建了一个联系人列表,将联系人保存在核心数据中。我可以通过姓名访问联系人,但我想知道如何获得到目前为止我保存了多少联系人的数量。

我认为托管对象上下文能够提供硬币,因为这是为每个新添加的联系人创建空间,但事实并非如此,或者可能我使用错了它。

代码如下:

代码语言:javascript
复制
import UIKit
import CoreData

class ViewController: UIViewController {

    let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    @IBOutlet weak var name: UITextField!
    @IBOutlet weak var address: UITextField!
    @IBOutlet weak var phone: UITextField!

    @IBOutlet weak var status: UILabel!

    @IBAction func saveContact(_ sender: UIButton) {

        let entityDescription = NSEntityDescription.entity(forEntityName: "Contacts", in: managedObjectContext)
        let contact = Contacts(entity: entityDescription!, insertInto: managedObjectContext)

        contact.name = name.text!
        contact.address = address.text!
        contact.phone = phone.text!
        do {
            try managedObjectContext.save()
            name.text = ""
            address.text = ""
            phone.text = ""
            status.text = "Contact Saved"
        } catch let error {
            status.text = error.localizedDescription               
        }          
    }

    @IBAction func findContact(_ sender: UIButton) {           
        let entityDescription = NSEntityDescription.entity(forEntityName: "Contacts",
                                                           in: managedObjectContext)
        let request: NSFetchRequest<Contacts> = Contacts.fetchRequest()
        request.entity = entityDescription
        let pred = NSPredicate(format: "(name = %@)", name.text!)
        request.predicate = pred
        do {
            var results =
                try managedObjectContext.fetch(request as! NSFetchRequest<NSFetchRequestResult>)
            if results.count > 0 {
                let match = results[0] as! NSManagedObject
                name.text = match.value(forKey: "name") as? String
                address.text = match.value(forKey: "address") as? String
                phone.text = match.value(forKey: "phone") as? String
                status.text = "Matches found: \(results.count)"
            } else {
                status.text = "No Match"
            }
        } catch let error {
            status.text = error.localizedDescription
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-03 02:39:26

您可以使用以下命令获取实体的对象数量

代码语言:javascript
复制
do {
    let request: NSFetchRequest<Contacts> = Contacts.fetchRequest()
    let numberOfContacts = try managedObjectContext.count(for: request)
    print(numberOfContacts)
} catch { print(error) }

附注:您的findContact方法非常繁琐。这是一个改进的版本

代码语言:javascript
复制
@IBAction func findContact(_ sender: UIButton) {

    let request: NSFetchRequest<Contacts> = Contacts.fetchRequest()
    request.predicate = NSPredicate(format: "name = %@", name.text!)
    do {
        let results = try managedObjectContext.fetch(request)
        if let match = results.first {
            name.text = match.name
            address.text = match.address
            phone.text = match.phone
            status.text = "Matches found: \(results.count)"
        } else {
            status.text = "No Match"
        }
    } catch {
        status.text = error.localizedDescription

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51660136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档