//
// CoreDataManager.swift
//
// Created by wangxuncai on 2021/11/27.
//
import Foundation
import CoreData
import UIKit
//Core data
class CoreDataManager{
static let instance = CoreDataManager() //單例
let container:NSPersistentContainer
let context:NSManagedObjectContext
init(){
container = NSPersistentContainer(name: "DataManagerCoreData")
container.loadPersistentStores { description, error in
if let error = error {
print("加載core data 失敗 :\(error.localizedDescription)")
}
}
context = container.viewContext
}
func save(){
do {
try context.save()
print("保存成功盈匾!")
} catch let error {
print(" 保存core data失敗 :\(error.localizedDescription) ")
}
}
}
//Model
class CoreDataViewModel:ObservableObject{
let manager = CoreDataManager.instance
@Published var students:[Student] = []
init(){
getStudents()
}
//給指定學(xué)生添加 照片
func add(image:UIImage,to student:Student){
let newPhoto = Photo(context: manager.context)
newPhoto.image = image.data
newPhoto.student = student
save()
getStudents()
}
func addStudent(name:String,classID:String,image:UIImage){
let newStudent = Student(context: manager.context)
newStudent.id = UUID()
newStudent.name = name
newStudent.classID = classID
if image != UIImage(){
newStudent.photo = image.data
}
//newStudent.recordInWord = ["沒寫好"]
save()
getStudents()
}
func deleteAllStudent(){
let entity = NSEntityDescription.entity(forEntityName: "Student", in: manager.context)
let request = NSFetchRequest<Student>(entityName: "Student")
//可以對request 進(jìn)行修飾
// request.fetchLimit = 10
// request.fetchOffset = 1
request.entity = entity
//根據(jù)謂詞進(jìn)行查詢
// let predicate = NSPredicate(format: "name= 'Mike'", "")
// request.predicate = predicate
do {
let students:[AnyObject]? = try manager.context.fetch(request)
for student:Student in students as! [Student] {
//刪除
manager.context.delete(student)
print("刪除成功")
}
save()
getStudents()
} catch let error {
print("獲取所有學(xué)生數(shù)據(jù)失敗。錯(cuò)誤信息: \(error.localizedDescription)")
}
}
func deleteStudent(byID:String){
let entity = NSEntityDescription.entity(forEntityName: "Student", in: manager.context)
let request = NSFetchRequest<Student>(entityName: "Student")
//可以對request 進(jìn)行修飾
// request.fetchLimit = 10
// request.fetchOffset = 1
request.entity = entity
//根據(jù)謂詞進(jìn)行查詢
// let predicate = NSPredicate(format: "name= 'Mike'", "")
// request.predicate = predicate
do {
let students:[AnyObject]? = try manager.context.fetch(request)
for student:Student in students as! [Student] {
//在這里修改
if student.classID == byID{
//刪除
manager.context.delete(student)
print("刪除成功")
save()
}
}
getStudents()
} catch let error {
print("獲取所有學(xué)生數(shù)據(jù)失敗做盅。錯(cuò)誤信息: \(error.localizedDescription)")
}
}
func update(){
let entity = NSEntityDescription.entity(forEntityName: "Student", in: manager.context)
let request = NSFetchRequest<Student>(entityName: "Student")
//可以對request 進(jìn)行修飾
// request.fetchLimit = 10
// request.fetchOffset = 1
request.entity = entity
//根據(jù)謂詞進(jìn)行查詢
let predicate = NSPredicate(format: "name= 'Mike'", "")
request.predicate = predicate
do {
let students:[AnyObject]? = try manager.context.fetch(request)
for student:Student in students as! [Student] {
//在這里修改
if student.classID == "1"{
//do sth
}
student.name = "wangxuncai"
save()
}
} catch let error {
print("獲取所有學(xué)生數(shù)據(jù)失敗橡类。錯(cuò)誤信息: \(error.localizedDescription)")
}
}
func getStudents(){
//描述一下 實(shí)體的名字边翁,在哪個(gè)上下文
let entity = NSEntityDescription.entity(forEntityName: "Student", in: manager.context)
//建立一個(gè)請求
let request = NSFetchRequest<Student>(entityName: "Student")
// request.fetchOffset = 0
// request.fetchLimit = 10
request.entity = entity
do {
students = try manager.context.fetch(request)
} catch let error {
print("獲取所有學(xué)生數(shù)據(jù)失敗奴艾。錯(cuò)誤信息: \(error.localizedDescription)")
}
}
func add(image:UIImage,student:Student){
if let data = image.jpegData(compressionQuality: 0){
// student.recordInPhoto = [data]
} else if let data = image.pngData(){
// student.recordInPhoto = [data]
}else{
print("保存照片失敗")
}
save()
}
func add(content:String,student:Student){
//student.recordInWord = [content]
save()
}
func save(){
manager.save()
}
}
蘋果應(yīng)用商店|搜|王勛才|有我全部作品
Core Data的使用
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衷掷,“玉大人辱姨,你說我怎么就攤上這事∑菪幔” “怎么了雨涛?”我有些...
- 文/不壞的土叔 我叫張陵枢舶,是天一觀的道長。 經(jīng)常有香客問我替久,道長凉泄,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任蚯根,我火速辦了婚禮后众,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘颅拦。我一直安慰自己蒂誉,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布距帅。 她就那樣靜靜地躺著右锨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碌秸。 梳的紋絲不亂的頭發(fā)上绍移,一...
- 文/蒼蘭香墨 我猛地睜開眼潮剪,長吁一口氣:“原來是場噩夢啊……” “哼涣楷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抗碰,我...
- 序言:老撾萬榮一對情侶失蹤狮斗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后弧蝇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碳褒,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年看疗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沙峻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布删顶,位于F島的核電站,受9級特大地震影響淑廊,放射性物質(zhì)發(fā)生泄漏逗余。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一季惩、第九天 我趴在偏房一處隱蔽的房頂上張望录粱。 院中可真熱鬧,春花似錦画拾、人聲如沸关摇。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至些楣,卻和暖如春脂凶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愁茁。 一陣腳步聲響...
- 正文 我出身青樓嘶居,卻偏偏與公主長得像,于是被迫代替她去往敵國和親促煮。 傳聞我的和親對象是個(gè)殘疾皇子邮屁,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- Core Data是iOS5之后才出現(xiàn)的一個(gè)框架,是數(shù)據(jù)持久化存儲(chǔ)的最佳方式.這里對于core Data不再做詳細(xì)...
- 創(chuàng)建 Core Data 工程 // 性能優(yōu)化:https://github.com/facebook/Async...
- 一、概念 1.Core Data 是數(shù)據(jù)持久化存儲(chǔ)的最佳方式2.數(shù)據(jù)最終的存儲(chǔ)類型可以是:SQLite數(shù)據(jù)庫菠齿,XM...
- iOS Persistence and Core Data L3 - Udacity的筆記 筆記目錄:1.保存數(shù)據(jù)...
- Core Data 的簡單理解 Core Data 一個(gè)對象持久化框架佑吝,并不是一個(gè)像SQLite一樣的關(guān)系型數(shù)據(jù)庫...