我创建了一个联系人列表,将联系人保存在核心数据中。我可以通过姓名访问联系人,但我想知道如何获得到目前为止我保存了多少联系人的数量。
我认为托管对象上下文能够提供硬币,因为这是为每个新添加的联系人创建空间,但事实并非如此,或者可能我使用错了它。
代码如下:
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
}
}
发布于 2018-08-03 02:39:26
您可以使用以下命令获取实体的对象数量
do {
let request: NSFetchRequest<Contacts> = Contacts.fetchRequest()
let numberOfContacts = try managedObjectContext.count(for: request)
print(numberOfContacts)
} catch { print(error) }
附注:您的findContact
方法非常繁琐。这是一个改进的版本
@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
}
}
https://stackoverflow.com/questions/51660136
复制相似问题