FetchResultController无法获取数据

时间:2018-12-27 09:58:52

标签: ios core-data

我是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浏览器检查时,它包含保存的数据。

1 个答案:

答案 0 :(得分:0)

您的fetchedResultsController是一个计算属性,每次对其进行评估时,它将返回不同的FRC实例。因此,performFetch是在tableView数据源方法中与FRC不同的实例上执行的。