使用arrayController导致“没有托管对象上下文无法执行操作”

昆德拉潘

我正在Swift 2.2中重写以前的objC应用程序。这是我NSArrayController用来填充NSTableView内容的可可应用程序该错误是显而易见的,尽管在Objective C应用程序中也可以使用类似的设置。

这是我的AppDelegate:

 var coreStack:AP_CoreDataStack!
var mainContext:NSManagedObjectContext!

override func awakeFromNib() {
coreStack = AP_CoreDataStack(){ (result) -> () in
        if result {
            self.mainContext = self.coreStack.mainContext
        }
    }
}

核心数据栈的设置

// MARK: - AP_CoreDataStack Class
class AP_CoreDataStack {

let mainContext: NSManagedObjectContext
let mastercontext: NSManagedObjectContext
var workerContext: NSManagedObjectContext?


internal typealias CallBack = (result:Bool) -> Void
init ( callback: CallBack) { 


    let modelURL = NSBundle.mainBundle().URLForResource("appNameSWIFT", withExtension: "momd")
    if (modelURL == nil) {
        print("Failed to initialize modelURL: \(modelURL)")
    }

    let mom = NSManagedObjectModel(contentsOfURL: modelURL!)
    if mom == nil {
        print("Failed to initialize model")
    }

    let psc = NSPersistentStoreCoordinator(managedObjectModel: mom!)

    mastercontext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
    mastercontext.persistentStoreCoordinator = psc

    mainContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
    mainContext.parentContext = mastercontext


    // add store to psc in background thread
    let qualityOfServiceClass = QOS_CLASS_BACKGROUND
    let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
    dispatch_async(backgroundQueue, {
        //BACKGROUND THREAD
        // adding store to persistent store coordinator
        let options = [NSInferMappingModelAutomaticallyOption:true,
            NSMigratePersistentStoresAutomaticallyOption:true]
        do {
            // store = try psc.addP
            try psc.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: applicationDocumentDirectory(), options: options)
        } catch let error as NSError {
            print("Error: Failed to load store \(error.localizedDescription), \(error.userInfo)")
        }

        // MAIN THREAD
        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            // On Main thread pass message that stack setup is complete
            callback(result: true)
        })
    })


}

上面是我的Obj C代码的Swift版本,可以正常工作。我有一个NSArrayController这势必会在厦门国际银行文件Entity,并NSManagedObjectContext在IB:

// Bind To Delegate
self.mainContext

似乎数组控制器在初始化之前正在访问mainContext,但这是在objC中起作用的相同设置,所以为什么它会导致Swift中的错误。

编辑:我正在使用常规的xib文件。

编辑2:

显然mainContext不是nil,因为在这里调用它可以正常工作

    func applicationDidFinishLaunching(aNotification: NSNotification) {
    // Insert code here to initialize your application

    let request = NSFetchRequest(entityName: "AP_EntityA")
    let list:Array<AnyObject>
    do {
        list = try coreStack.mainContext.executeFetchRequest(request)
        for item in list {
            let product = item as! AP_EntityA
           print("item name is: \(product.uniqueName)")
        }
    } catch let error as NSError {
        // failure
        print("Fetch failed: \(error.localizedDescription)")
    }

}
维莱克

添加dynamic关键字以使Swift属性符合KVO。

dynamic var mainContext:NSManagedObjectContext!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法在iOS上创建托管对象上下文

子上下文新的托管对象

由于上下文问题,无法执行单元测试吗?

Django'str'对象没有属性'field'上下文

对象没有被推入上下文 api 中的数组

pyudev类型对象“上下文”没有属性“ _libudev”

“AttributeError: 'NoneType' 对象没有属性 'test'” 使用上下文管理器

有没有办法查看托管对象上下文中的哪些对象尚未添加到持久性存储中?

核心数据托管对象无法保存上下文(错误134030)

使用来自 Activity 的上下文从 Adapter 类中的 Viewholder 创建对象 - 没有为“上下文”传递值

上下文菜单中没有“使用IDLE编辑”

将多个托管对象上下文与核心数据库一起使用

核心数据:使用UITabBarController从AppDelegate为应用程序设置托管对象上下文

在NSPersistentDocument中从哪里获取托管对象上下文?

来自 App Delegate 的托管对象上下文为零

使用AppCompat的上下文操作栏

没有取消传播的上下文

没有与上下文路径[/ struts]关联的名称空间[/]和操作名称[]映射的操作

Javascript中的执行上下文和执行上下文对象

如何执行具有sudo权限但没有根上下文的程序?

Service() 的上下文会导致“此字段泄漏上下文对象”吗?

使用带有复杂对象的钩子设置提供程序值时,无法更新上下文状态

scala的执行上下文和播放的执行上下文之间有什么区别

如何使用python 3对文件执行上下文菜单操作

即使我已导入ExecutionContex.global,也没有执行上下文

全局执行上下文中没有内部函数的 JavaScript 变量不可用

在同一执行线程中没有通道的上下文

当没有上下文可用时,如何从异步执行中显示SnackBar?

如何执行石英上下文中DB / JPA操作?