我是ios App Development的新手。我尝试制作一个包含tableView的简单应用程序,我们可以向tableView添加行,并且可以使用CoreData将数据保存在数据库中。我正在使用NSFetchedResultController实现此目的,但是当我尝试在Simulator中运行它时,我添加的数据没有添加到数据库中,因此无法提取。我尝试了其他各种解决方案,但无法解决。
CoreDataStack.swift
col-md-6
和我的ViewController
import Foundation
import CoreData
class CoreDataStack {
private init() {}
static let shared = CoreDataStack()
lazy var context = CoreDataStack.shared.persistentContainer.viewContext
var fetchedResultsController: NSFetchedResultsController<UserEntity> {
let fetchRequest: NSFetchRequest<UserEntity> = UserEntity.fetchRequest()
let nameSortDescriptor = NSSortDescriptor(key: "name", ascending: true)
let passwordSortDescriptor = NSSortDescriptor(key: "password", ascending: true)
fetchRequest.sortDescriptors = [nameSortDescriptor,passwordSortDescriptor]
let fetchResultsController = NSFetchedResultsController<UserEntity>(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
return fetchResultsController
}
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "NSFRCCoreData")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
// MARK: - Core Data Saving support
func saveContext () {
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
}
TableView不显示任何数据,但是当我使用sqlite浏览器检查时,它包含保存的数据。
答案 0 :(得分:0)
您的fetchedResultsController
是一个计算属性,每次对其进行评估时,它将返回不同的FRC实例。因此,performFetch
是在tableView数据源方法中与FRC不同的实例上执行的。