'print all items saved in a core data string1

I want my swift code to print out the strings attributes. Right now when calling the function I am getting a runtime error at context. I just want to print out all of each string entry. I have added the function in question below.

Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

let appDelegate = UIApplication.shared.delegate as! AppDelegate //Singlton instance
var context:NSManagedObjectContext!

@objc func pressRight(){
    let fetchRequest = NSFetchRequest<Place>(entityName: "Name")
      do {
          let result = try context.fetch(fetchRequest)
          let nameArray = result.map{$0.name}
          print(nameArray)
      } catch {
         print("Could not fetch \(error) ")
      }

   
    
} 

pic



Solution 1:[1]

select manual in code gen enter image description here then create custom class of place add to your project enter image description here You are using the wrong entity name "Name" instead of "Place"

import Foundation
import CoreData

class CoreDataManager {

    static let shared = CoreDataManager()
    private init() {}
    lazy var coreDataStack = CoreDataStack(modelName: "Place")

    func allNames() -> [String]? {
      let request: NSFetchRequest<Place> = Place.fetchRequest()
      do {
        // Peform Fetch Request
        let places = try coreDataStack.managedContext.fetch(request)
        return places.map({$0.name})
      } catch {
        print("Unable to Fetch Workouts, (\(error))")
      }
      return nil
  }

func allPlaces() -> [Place]? {
      let request: NSFetchRequest<Place> = Place.fetchRequest()
      do {
        // Peform Fetch Request
        let places = try coreDataStack.managedContext.fetch(request)
        return places
      } catch {
        print("Unable to Fetch Workouts, (\(error))")
      }
      return nil
  }
}

if you still getting error then before this initialize your context managedObjectContext/context you force unwrapping it

add this stack class

import Foundation
import CoreData

class CoreDataStack {

private let modelName: String
lazy var managedContext: NSManagedObjectContext = {
    return self.storeContainer.viewContext
}()

init(modelName: String) {
    self.modelName = modelName
}

private lazy var storeContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: self.modelName)
    container.loadPersistentStores { storeDescription, error in
        if let error = error as NSError? {
            print("Unresolved error \(error), \(error.userInfo)")
        }
    }
    return container
}()

func saveContext() {
    guard managedContext.hasChanges else {return}
    do{
        try managedContext.save()
    } catch let error as NSError {
        print("Unresolved error \(error), \(error.userInfo)")
    }
}

func updateContext() {
    do {
        try managedContext.save()
    } catch let error as NSError {
        print("Unresolved error \(error), \(error.userInfo)")
    }
}

func clearChange() {
    managedContext.rollback()
}

} then how to use it in your view controller viewDidLoad() function or any other button tap action you can get your place names like this

    override func viewDidLoad() {
        super.viewDidLoad()
//       here you get all names 
           let names = CoreDataManager.shared.allNames()
           print(names)
           let places = CoreDataManager.shared.allPlaces()
           print(places)
           let namesAgain = places.map({$0.name})
           print(namesAgain)
     }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1