iOS

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()

                }

留言

您的电子邮箱地址不会被公开。