Всем привет, коллеги! Какая-то ерунда! Делал совместимость cсredata с ios 9, тестирую и вылазит какой-то баг! Запись в cсredata происходит нормально, а вот чтение что-то не идет! Укажите на мою ошибку!
Код запроса
// Load data from DB
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Children")
let sortDescriptor = NSSortDescriptor(key: "createDate", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
if #available(iOS 10.0, *) {
if let managedObjectContext = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext {
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
fetchedResultsController.delegate = self
var error: NSError?
var result: Bool
do {
try fetchedResultsController.performFetch()
result = true
} catch let error1 as NSError {
error = error1
result = false
}
childrens = fetchedResultsController.fetchedObjects as! [Child]
if result == false {
print("описание ошибки \(String(describing: error?.localizedDescription))")
}
}
} else {
if let managedObjectContext = (UIApplication.shared.delegate as? AppDelegate)?.managedObjectContext{
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
fetchedResultsController.delegate = self
var error: NSError?
var result: Bool
do {
try fetchedResultsController.performFetch()
result = true
} catch let error1 as NSError {
error = error1
result = false
}
childrens = fetchedResultsController.fetchedObjects as! [Child]
if result == false {
print("описание ошибки \(String(describing: error?.localizedDescription))")
}
}
}
print(childrens.count)
}
AppDelegate
// MARK: - utility routines
lazy var applicationDocumentsDirectory: URL = {
let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return urls[urls.count-1]
}()
// MARK: - Core Data stack (generic)
lazy var managedObjectModel: NSManagedObjectModel = {
let modelURL = Bundle.main.url(forResource: "MyFirstDairy", withExtension: "momd")!
return NSManagedObjectModel(contentsOf: modelURL)!
}()
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let url = self.applicationDocumentsDirectory.appendingPathComponent("MyFirstDairy.sqlite")
do {
try coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: nil)
} catch {
let dict : [String : Any] = [NSLocalizedDescriptionKey : "Failed to initialize the application's saved data" as NSString,
NSLocalizedFailureReasonErrorKey : "There was an error creating or loading the application's saved data." as NSString,
NSUnderlyingErrorKey : error as NSError]
let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
fatalError("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
}
return coordinator
}()
// MARK: - Core Data stack (iOS 9)
@available(iOS 9.0, *)
lazy var managedObjectContext: NSManagedObjectContext = {
var managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = self.persistentStoreCoordinator
return managedObjectContext
}()
// MARK: - Core Data stack (iOS 10)
@available(iOS 10.0, *)
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "MyFirstDairy")
container.loadPersistentStores(completionHandler: {
(storeDescription, error) in
if let error = error as NSError?
{
fatalError("Unresolved error \(error), \(error.userInfo)")
}
}
)
return container
}()
// MARK: - Core Data context
lazy var databaseContext : NSManagedObjectContext = {
if #available(iOS 10.0, *) {
return self.persistentContainer.viewContext
} else {
return self.managedObjectContext
}
}()
// MARK: - Core Data save
func saveContext () {
do {
if databaseContext.hasChanges {
try databaseContext.save()
}
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}