kabochappinote

articlesswift
swift codeMemo (CoreData)

swift codeMemo (CoreData)


2021-09-02 12:31:22

⚪︎ CoreData

  ① ※CoreDataの追加
   File -> New -> File から CoreDataカテゴリー の DataModelファイル を追加


  ② ※ AppDelegate.swiftに CoreDataStack, CoreDataSavignSupport を追加

   // MARK: - Core Data stack
import CoreData

lazy var persistentContainer: NSPersistentContainer = {
                                        // ↓ データネームは①のファイル名と同じにする
    let container = NSPersistentContainer(name: "DataModel")
    container.loadPersistentStores(completionHandler: { 
        (storeDescription, error) in
        if let error = error as NSError? {
            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()

   // MARK: - Core Data Saving support
    func saveContext () {
        let context = persistentContainer.viewContext
        if context.hasChanges {
            do {
                try context.save()
            } catch {
                let nserror = error as NSError
                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        }
    }

   // MARK: - Model Manupulation Methods
    /* Item の保存 */
    func saveItems() {
        do {
            try context.save()
        }catch{
            print("DEBUG: Error saving context \(error)")
        }
        self.tableView.reloadData()
    }

    /* Items のロード */
    func loadItems() {
        // 必ず出力するデータイプを指定する必要がある (ex: )
        let request: NSFetchRequest = Item.fetchRequest()
        do {
            itemArray = try context.fetch(request)
        } catch {
            print("DEBUG: Error fetching data from context \(error)")
        }
    }



アイテムの削除

   // MARK: - TableViewDelegate
extension TodoListVC: UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        /* パーマネントストアからデータを削除し */
        context.delete(itemArray[indexPath.row])

        /* テーブルビューのデータソースをロードするために使用される itemArray から現​​在のアイテムを削除 */
        itemArray.remove(at: indexPath.row)

        saveItems()
    }
}




セクション19 の No.249 の 6:00 辺り   ※ Entity ≒ Table ≒ Class, Abustract ≒ Property ① xcode タスクバー(下の方)のAdd Entitiy クリック ② 必要な数の Attribute を追加、Type を選択。(Typeが確定し、nil にならないものであれば Optional のチェックを外しておく) ③ 作成した Entity の Name を設定した名前に(Item)、その3つ下の Class Module を Current Product Module にする ④



sqlite filePath ( Path/Library/Application Support/***.sqlite Path = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)



Libraryが隠れてる場合 not work chflags nohidden ~/Library/

back