0

It's possible to have something like this.

public class Request<T: NSFetchRequestResult> : NSManagedObject {
    @NSManaged public var id: Int16
    @NSManaged public var fetchRequest: NSFetchRequest<T>?
}
...
public class Ticker: NSManagedObject {

}

But I cannot get an actual type, when I called context.insertNewObjectForEntity(forName: "Request")

class func requestForLCMain() -> Request<Ticker>? {
    let context = DataManager.sharedInstance.mainContext
    let id = RequestId.ticker
    let fetchRequest: NSFetchRequest<Request<Ticker>> = Request.fetchRequestFunc()
    fetchRequest.predicate = NSPredicate(format: "id = %@", id.rawValue)
    fetchRequest.fetchBatchSize = 1
    do {
        if let request = try context.fetch(fetchRequest).first {
            return request
        } else {
            let newRequest = context.insertNewObjectForEntity(forName: "Request") as? Request<Ticker> // ? returns nil
            newRequest.fetchRequest = ... // ?
            return newRequest
        }
    } catch let error {
        print(error)
    }
    return nil
}

Can I do something or it's a wrong way have a generic NSManagedObject ?

Tikhonov Aleksandr
  • 13,945
  • 6
  • 39
  • 53

1 Answers1

0

Please check out this answer I think it states exactly what you are trying to achieve.

Community
  • 1
  • 1
Yordi
  • 166
  • 7