Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extension Friend {
- @nonobjc public class func fetchRequest() -> NSFetchRequest<Friend> {
- let request = NSFetchRequest<Friend>(entityName: "Friend")
- request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
- return request
- }
- @NSManaged public var name: String?
- @NSManaged public var profileImageName: String?
- @NSManaged public var messages: NSSet?
- }
- import Foundation
- import CoreData
- class CoreDataStack {
- lazy var managedObjectContext: NSManagedObjectContext = {
- let container = self.persistentContainer
- return container.viewContext
- }()
- // lazy var managedObjectContext: NSManagedObjectContext = {
- // let coordinator = self.persistentStoreCoordinator
- // var moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
- // moc.persistentStoreCoordinator = coordinator
- // return moc
- // }()
- //
- // //MARK: не работает
- // private lazy var privateManagedObjectContext: NSManagedObjectContext = {
- // let moc = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
- // moc.persistentStoreCoordinator = self.persistentStoreCoordinator
- //
- // return moc
- // }()
- // //MARK: moc
- // private(set) lazy var defManagedObjectContext: NSManagedObjectContext = {
- // let moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
- // moc.parent = self.privateManagedObjectContext
- //
- // return moc
- // }()
- private lazy var persistentContainer: NSPersistentContainer = {
- let container = NSPersistentContainer(name: "messenger")
- container.loadPersistentStores() { storeDescr, error in
- if let error = error as NSError? {
- fatalError("(error), (error.userInfo)")
- }
- }
- return container
- }()
- private(set) lazy var applicationDocumentsDirectory: URL = {
- let urls = FileManager.default.urls(for: .documentDirectory,
- in: .userDomainMask)
- let endIndex = urls.index(before: urls.endIndex)
- return urls[endIndex]
- }()
- private(set) lazy var managedObjectModel: NSManagedObjectModel = {
- let modelUrl = Bundle.main.url(forResource: "messenger", withExtension: "momd")!
- return NSManagedObjectModel(contentsOf: modelUrl)!
- }()
- private(set) lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
- let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
- let url = self.applicationDocumentsDirectory.appendingPathComponent("messenger.sqlite")
- do {
- try coordinator.addPersistentStore(ofType: NSSQLiteStoreType,
- configurationName: nil,
- at: url)
- } catch {
- print(error)
- abort()
- }
- return coordinator
- }()
- }
- extension NSManagedObjectContext {
- func saveChanges() {
- let queue = DispatchQueue.global(qos: .userInitiated)
- queue.async {
- if self.hasChanges {
- do {
- try self.save()
- } catch {
- fatalError("(error.localizedDescription)")
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement