AppDelegate 类型的值没有成员 managedObjectContext

Posted

技术标签:

【中文标题】AppDelegate 类型的值没有成员 managedObjectContext【英文标题】:value of type AppDelegate has no member managedObjectContext 【发布时间】:2017-05-17 12:33:57 【问题描述】:

代码

    let managedObjectContext =
        (UIApplication.sharedApplication.delegate
            as! AppDelegate).managedObjectContext
    

错误:

AppDelegate 类型的值没有成员 managedObjectContext

我的问题是我想在 Xcode 8 中使用 managedObjectContext,但它说 AppDelegate 没有这样的成员。我想使用它,因为我想用核心数据为 ios 9 创建一个项目。 我要managedObjectContext的定义,有的话请留言

【问题讨论】:

当您创建项目时,您检查过use core data 吗?还是未选中? 我觉得你需要参考http://***.com/questions/2032818/adding-core-data-to-existing-iphone-project 是的,我检查过了,问题是我正在为 ios 9 创建一个项目,而 xcode 8 正在创建 appdelegate 文件,其核心数据与 ios 10 兼容。 增加了persistentContainer: NSPersistentContainer 与ios 9不兼容 有一个关于 SO 的答案,其中包括旧式 Core Data 访问的类源,但已转换为 Swift 3:***.com/questions/38120937/… 【参考方案1】:

说明:

错误很清楚,它指出AppDelegate 没有名为managedObjectContext 的属性。检查AppDelegate 并查看名称为managedObjectContext 的属性是否存在。

参考:

在编写代码之前了解以下内容非常重要:

概念 - https://developer.apple.com/library/content/documentation/DataManagement/Devpedia-CoreData/coreDataOverview.html#//apple_ref/doc/uid/TP40010398-CH28-SW1

分步指南 - https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/index.html#//apple_ref/doc/uid/TP40001075-CH2-SW1

【讨论】:

我理解错误,但我想要现在找到的 managedObjectContext 的定义。 参考第1个链接,虽然读起来比较费时,但会帮助你理解清楚。 ManagedObjectContext 就像一个便笺簿,您可以在其中进行更改。稍后您可以保存上下文。【参考方案2】:

您只需要创建一个勾选“使用核心数据”的项目,它就会在您项目的应用程序委托中可用。image of project creation and selection of use core data tick mark

    lazy var persistentContainer: NSPersistentContainer = 
    /*
     The persistent container for the application. This implementation
     creates and returns a container, having loaded the store for the
     application to it. This property is optional since there are legitimate
     error conditions that could cause the creation of the store to fail.
    */
    let container = NSPersistentContainer(name: "temp")
    container.loadPersistentStores(completionHandler:  (storeDescription, error) in
        if let error = error as NSError? 
            // Replace this implementation with code to handle the error appropriately.
            // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.

            /*
             Typical reasons for an error here include:
             * The parent directory does not exist, cannot be created, or disallows writing.
             * The persistent store is not accessible, due to permissions or data protection when the device is locked.
             * The device is out of space.
             * The store could not be migrated to the current model version.
             Check the error message to determine what the actual problem was.
             */
            fatalError("Unresolved error \(error), \(error.userInfo)")
        
    )
    return container
()

在应用委托中使用

let context = persistentContainer.viewContext

【讨论】:

问题是,“我想为 ios 9 创建一个项目”。您是否在 iOS 9 上尝试过您的解决方案? 是的,我想为 ios 9 创建项目,所以我想要检查核心数据的“appdelegate.swift”文件。如果有人有 ios 9 的文件,请参考。 菲利普米尔斯你能帮忙吗,谢谢 @VikrantSingh - 您的问题的 cmets 中有一个链接指向另一个问题,该问题有我能给您的最佳答案。

以上是关于AppDelegate 类型的值没有成员 managedObjectContext的主要内容,如果未能解决你的问题,请参考以下文章

“AppDelegate”类型的值没有成员“manageObjectContext”

Swift:实现快捷方式项目(3D 触摸)共享项目错误“AppDelegate 类型的值没有当前成员”

“FileManager”类型的值没有成员“urlsForDirectory”-AppDelegate Swift 3 错误

“AppDelegate”类型的IOS开发值没有成员“managedObjectContext”Xcode 10

AppDelegate 类型 var 不是成员,除非在 func 中(见图)

静态成员“负载”不能用于“AppDelegate”类型的实例