Post

Core Data Tips

Core Data Tips

Core Data Tips

How to initiate core data object without inserting it to the context

1
let gif = Gif(entity: NSEntityDescription.entity(forEntityName: String(describing: Gif.self), in: DataController.shared.persistentContainer.viewContext)!, insertInto: nil)

remove All Data

1
2
3
4
5
6
7
8
9
10
let fetchRequest = NSFetchRequest(entityName: String(describing: Gif.self))
let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)

do {
    let moc = DataController.shared.persistentContainer.viewContext
    try moc.execute(deleteRequest)
    try moc.save()
} catch let error as NSError {
    fatalError("Failure to delete context: \(error)")
}

Event if the data has it’s id, I cannot change or set objectId of core data entity object. So even if you find a object with that kind of id, you need to use predicate

1
2
3
4
5
6
7
8
9
10
11
12
13
let moc = DataController.shared.persistentContainer.viewContext
let fetchRequest = NSFetchRequest(entityName: String(describing: Gif.self))
fetchRequest.predicate = NSPredicate(format: "id == %@", gif.id)

isFavorite = false
do {
    fetchedGifs = try moc.fetch(fetchRequest) as! [Gif]
    if !fetchedGifs.isEmpty {
        isFavorite = true
    }
} catch {
    fatalError("Failed to fetch favorite gifs: \(error)")
}
This post is licensed under CC BY 4.0 by the author.