ios——datebase数据库
swift下使用datebase数据库方法
1、首先新建数据库文件,command+N新建Data Model文件,文件名自定义(这里使用Test做示例)。完成后左边项目文件列表里会多出一个Test.xcdatamodel文件。
2、双击打开xcdatamodel文件,左边的entities对于数据库中的表,右边Attribute对应表中的属性。对应自己的需求建立自己的数据库即可,新建的entities名称首字母必须大写。
3、新建一个swift文件,命名为PersistenceController.swift,替换为以下代码
import Foundation
import CoreData
struct PersistenceController {
// A singleton for our entire app to use
static let shared = PersistenceController()
func save() {
let context = container.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
print(error)
}
}
}
// Storage for Core Data
let container: NSPersistentContainer
// A test configuration for SwiftUI previews
static var preview: PersistenceController = {
let controller = PersistenceController(inMemory: true)
// Create 10 example programming languages.
for _ in 0..<10 {
//这里的TiXing是表的名字
let tixing = TiXing(context: controller.container.viewContext)
tixing.notetime = Date()
tixing.notice = “122”
tixing.end = false
}
return controller
}()
// An initializer to load Core Data, optionally able
// to use an in-memory store.
init(inMemory: Bool = false) {
// If you didn’t name your model Main you’ll need
// to change this name below.
//这里的Note为建立的数据库的名字,即新建的Data Model的文件名
container = NSPersistentContainer(name: “Note”)
if inMemory {
container.persistentStoreDescriptions.first?.url = URL(fileURLWithPath: “/dev/null”)
}
container.loadPersistentStores { description, error in
if let error = error {
fatalError(“Error: \(error.localizedDescription)“)
}
}
}
}
4、切换的App.swift文件,在 var body: some Scene {上方加入如下代码
let persistenceController = PersistenceController.shared
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
然后把数据库环境注入全局,在ContentView()下加入如下修饰符代码
.environment(\.managedObjectContext, persistenceController.container.viewContext)
OK,现在准备工作就做好了,可以开始使用数据库了。
5、在需要使用数据库的swiftUI文件里,在结构体声明@State变量的地方加入如下声明数据库的代码
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(
entity: TiXing.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \TiXing.notetime, ascending: true),
NSSortDescriptor(keyPath: \TiXing.notice, ascending: false),
NSSortDescriptor(keyPath: \TiXing.end, ascending: false),
NSSortDescriptor(keyPath: \TiXing.id, ascending: false),
NSSortDescriptor(keyPath: \TiXing.weekday, ascending: false)
]
) var Item: FetchedResults<TiXing>
这里的TiXing为表名,TiXing.notetime代表TiXing的notetime属性,一一替换为自己的即可。
6、添加数据
let addItem = TiXing(context: managedObjectContext)
addItem.notetime = time
let id = UUID()
addItem.notice = text
addItem.end = false
addItem.id = id
addItem.weekday = weekday
PersistenceController.shared.save()
使用print(NSHomeDirectory())可以在控制台中打印sqlite所在的文件夹路径,使用sqlite软件可以直接对数据库进行操作。
7、删除数据
managedObjectContext.delete(note)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
PersistenceController.shared.save()
}