Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. extension Friend {
  2.  
  3. @nonobjc public class func fetchRequest() -> NSFetchRequest<Friend> {
  4. let request = NSFetchRequest<Friend>(entityName: "Friend")
  5. request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
  6. return request
  7. }
  8.  
  9. @NSManaged public var name: String?
  10. @NSManaged public var profileImageName: String?
  11. @NSManaged public var messages: NSSet?
  12.  
  13. }
  14.  
  15. import Foundation
  16. import CoreData
  17.  
  18. class CoreDataStack {
  19.  
  20.  
  21. lazy var managedObjectContext: NSManagedObjectContext = {
  22. let container = self.persistentContainer
  23. return container.viewContext
  24. }()
  25.  
  26. // lazy var managedObjectContext: NSManagedObjectContext = {
  27. // let coordinator = self.persistentStoreCoordinator
  28. // var moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
  29. // moc.persistentStoreCoordinator = coordinator
  30. // return moc
  31. // }()
  32. //
  33. // //MARK: не работает
  34. // private lazy var privateManagedObjectContext: NSManagedObjectContext = {
  35. // let moc = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
  36. // moc.persistentStoreCoordinator = self.persistentStoreCoordinator
  37. //
  38. // return moc
  39. // }()
  40. // //MARK: moc
  41. // private(set) lazy var defManagedObjectContext: NSManagedObjectContext = {
  42. // let moc = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
  43. // moc.parent = self.privateManagedObjectContext
  44. //
  45. // return moc
  46. // }()
  47.  
  48. private lazy var persistentContainer: NSPersistentContainer = {
  49. let container = NSPersistentContainer(name: "messenger")
  50. container.loadPersistentStores() { storeDescr, error in
  51. if let error = error as NSError? {
  52. fatalError("(error), (error.userInfo)")
  53. }
  54. }
  55. return container
  56. }()
  57.  
  58. private(set) lazy var applicationDocumentsDirectory: URL = {
  59. let urls = FileManager.default.urls(for: .documentDirectory,
  60. in: .userDomainMask)
  61. let endIndex = urls.index(before: urls.endIndex)
  62. return urls[endIndex]
  63. }()
  64.  
  65. private(set) lazy var managedObjectModel: NSManagedObjectModel = {
  66. let modelUrl = Bundle.main.url(forResource: "messenger", withExtension: "momd")!
  67. return NSManagedObjectModel(contentsOf: modelUrl)!
  68. }()
  69.  
  70. private(set) lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
  71. let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
  72. let url = self.applicationDocumentsDirectory.appendingPathComponent("messenger.sqlite")
  73.  
  74. do {
  75. try coordinator.addPersistentStore(ofType: NSSQLiteStoreType,
  76. configurationName: nil,
  77. at: url)
  78. } catch {
  79. print(error)
  80. abort()
  81. }
  82.  
  83. return coordinator
  84. }()
  85.  
  86.  
  87. }
  88.  
  89. extension NSManagedObjectContext {
  90.  
  91. func saveChanges() {
  92. let queue = DispatchQueue.global(qos: .userInitiated)
  93. queue.async {
  94. if self.hasChanges {
  95. do {
  96. try self.save()
  97. } catch {
  98. fatalError("(error.localizedDescription)")
  99. }
  100. }
  101. }
  102. }
  103.  
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement