【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) }