【Swift5】CoreDataに配列を保存。

コアデータに配列を保存する方法です。

import CoreData

アプリ名.xcdatamodeldより、以下のように設定します。

ENTITIES・・・MyData

Attribute・・・MyArray    Type・・・Binary Data

保存の方法。例では、多次元配列を保存しています。

let array = [[1,3,6],[2,2,8]]
let data:Data = NSKeyedArchiver.archivedData(withRootObject: array)
   
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
    return
}
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "MyData",in: managedContext)!
let manageObject = NSManagedObject(entity: entity,
                                          insertInto: managedContext)
manageObject.setValue(data, forKeyPath: "MyArray")
do {
    try managedContext.save()
} catch let error as NSError {
    print("Could not save. \(error), \(error.userInfo)")
}

読み込み。変数dataに、全てのMyDataを格納します。MyArrayを使う時は、前記事同様に、解凍する必要があります。

var data:[MyData] = []
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
    return
}
       
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "MyData")
do {
    data = try managedContext.fetch(fetchRequest) as! [MyData]
} catch let error as NSError {
    print("Could not fetch. \(error), \(error.userInfo)")
}
       

コアデータより削除。deleteメソッドの引数に削除したいオブジェクトを指定します。テーブルビュー等で使う時は、変数dataからも削除します。

var data:[MyData] = []

//中略


let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
                   
context.delete(self.data[0])
do { try context.save() }
catch { fatalError(error.localizedDescription) }



この記事が気に入ったらサポートをしてみませんか?