0

I am new to Core Data and I would like to organize/architecture it.

I have an object called Order that I create a table for it on xcdatamodel.

I also have a TableView that show me all Orders.

The problem is that sometimes I need a specific field from all Orders, like the newer date of all of them.

So, I have a Order Extension that import CoreData:

import CoreData

extension Order: NSFetchedResultsControllerDelegate {

    func getNewerDateOrders(condition: [String]) -> [Order]? {
        //I do fetch on all orders something like:
        let fetchRequest: NSFetchRequest<Order> = Order.fetchRequest()
        let sortDescriptor = NSSortDescriptor(key: "dateOrder", ascending: false)
        fetchRequest.sortDescriptors = [sortDescriptor]

        //etc etc (big logic to get the specific date)

        return fetchedResultController?.fetchedObjects
    }
}

The problem is that when I want to get this specific date on my OrderViewController, I try to do let orderDAO = Order(), but I am getting this error:

error: CoreData: error: Failed to call designated initializer on NSManagedObject class 'Pedido'
CoreData: error: CoreData: error: Failed to call designated initializer on NSManagedObject class 'Pedido'

I can understand, that means I can not instantiate my NSManagedObject in my ViewController. So how can I do that? Previously I was putting this method (getNewerDateOrders) inside ViewController, but it was getting huge and messy. I would like to separate it on the right place.

Can someone help me please?

asr
  • 139
  • 3
  • 11
  • See [this answer](https://stackoverflow.com/a/33307824/3985749) regarding the designated initialiser error. – pbasdf Nov 29 '18 at 08:25
  • I've tried it already. But I had a problem with context initializing it before viewDidLoad: Cannot use instance member 'context' within property initializer; I need to initialize there, otherwise I will need to initialize it 10 times at another places. I put it before viewDidLoad: let orderDAO = Order.init(entity: NSEntityDescription.entityForName("Order", inManagedObjectContext: context)!, insertInto: context) – asr Nov 29 '18 at 11:31

0 Answers0