I have iOS app written in Swift that works with Core Data. No I want to get last record that exists in Core Data and present it in Today Widget Extension.
- I added new widget target to my project
- In my coredata.xcdatamodeld I also checked target membership for extension
- For both targets (app and extension) I added and enabled specially created App Group group.myapp.sharingForTodayExtension
Here is my code from TodayViewController
import UIKit import NotificationCenter import CoreData class TodayViewController: UIViewController, NCWidgetProviding { var managedObjectContext : NSManagedObjectContext? override func viewDidLoad() { super.viewDidLoad() let container = PersistentContainer(name: "containerName") container.loadPersistentStores { (storeDesc, error) in if let error = error { print("Widget Core Data loading error.... \(error)") return } print("loaded fine") self.managedObjectContext = container.viewContext let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "appEntities") if let fetchResults = (try? self.managedObjectContext?.fetch(fetchRequest)) as? [myCoreDataObjectType] { print("records count = \(fetchResults.count)") }
And here is special class for PersistentContainer
class PersistentContainer: NSPersistentContainer{
override class func defaultDirectoryURL() -> URL{
return FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.myapp.sharingForTodayExtension")!
}
override init(name: String, managedObjectModel model: NSManagedObjectModel) {
super.init(name: name, managedObjectModel: model)
}}
The problem is it shows that records count = 0