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/