【问题标题】:Swift fetchResultsController: Instance member cannot be used on type 'ViewController'Swift fetchResultsController:实例成员不能用于“ViewController”类型
【发布时间】:2017-01-30 04:58:09
【问题描述】:

我正在 Udacity 上的 CoreData 项目上工作,并且在实现 fetchedResultsController 时遇到了困难。我试图用惰性变量实例化 fetchedResultsController 但它提示我“实例成员上下文不能用于类型'ViewController'。我的代码如下:

//AppDelegate
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    let stack = CoreDataStack(modelName: "Model")
    ... 
}

//ViewController
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, MKMapViewDelegate{

    lazy var context: NSManagedObjectContext = {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        return appDelegate.stack!.context
    }()

    lazy var fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult> = {
        let fetchedRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Photo")
        fetchedRequest.sortDescriptors = []

        return NSFetchedResultsController(fetchRequest: fetchedRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
    }()

这样做会在 fetchedResultsController 中的“上下文”处给我一个错误行,指示:

实例成员“context”不能用于类型“ViewController”

我做错了什么吗?任何建议都非常感谢,谢谢!

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

    在惰性属性中引用context时需要显式使用self

    return NSFetchedResultsController(fetchRequest: fetchedRequest, managedObjectContext: self.context, sectionNameKeyPath: nil, cacheName: nil)
    

    【讨论】:

    • 天哪,你用看似微不足道的东西解决了我 2 小时的挫败感。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2023-03-24
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多