之前写过CoreData,现在都忘记了,不多说,直接上代码和截图,增删改查的功能都有
import UIKit
import CoreData
class ViewController: UIViewController {
let entityName = "Person"
let managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
override func viewDidLoad() {
super.viewDidLoad()
if let path = Bundle.main.path(forResource: "testCoredataDemo", ofType: "momd") {
if let mom = NSManagedObjectModel(contentsOf: URL(fileURLWithPath: path)) {
let psc = NSPersistentStoreCoordinator(managedObjectModel: mom)
managedObjectContext.persistentStoreCoordinator = psc
if let dataPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last {
print(dataPath)
let path = dataPath.appending("/testCoredataDemo.sqlite")
do {
try psc.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: URL(fileURLWithPath: path), options: nil)
} catch {
print(error)
}
}
}
} else {
print("path is error")
}
}
//增
@IBAction func insertAction(_ sender: UIButton) {
let person = NSEntityDescription.insertNewObject(forEntityName: entityName, into: managedObjectContext) as! Person
person.name = "First name \(10)"
person.age = Int64(truncating: NSNumber(value: arc4random_uniform(100)))
do {
try managedObjectContext.save()
} catch {
print(error)
}
}
// 删
@IBAction func deleteAction(_ sender: UIButton) {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")
let predicate = NSPredicate.init(format: "age = %@",NSNumber(value: 44))
request.predicate = predicate
do {
let result = try managedObjectContext.fetch(request)
result.forEach({ (person) in
managedObjectContext.delete(person as! NSManagedObject)
})
print(managedObjectContext.deletedObjects)
if managedObjectContext.hasChanges {
try managedObjectContext.save()
}
} catch {
print(error)
}
}
// 改
@IBAction func changeAction(_ sender: UIButton) {
let request = NSFetchRequest<NSFetchRequestResult>.init(entityName: "Person")
let predicate = NSPredicate(format: "age = %@", NSNumber(value: 30))
request.predicate = predicate
do {
let result = try managedObjectContext.fetch(request) as! [Person]
result.forEach({ (person) in
person.age = 10000
})
print(managedObjectContext.updatedObjects)
if managedObjectContext.hasChanges {
try managedObjectContext.save()
}
} catch {
print(error)
}
}
// 查
@IBAction func searchAction(_ sender: Any) {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")
do {
let result = try managedObjectContext.fetch(request) as! [Person]
print(result)
print(managedObjectContext.registeredObjects)
} catch {
print(error)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}