ios - Swift、GCD 和 CoreData 错误 : error: NULL _cd_rawData but the object is not being turned into a fault

标签 ios swift core-data grand-central-dispatch

我编写了一些代码,可以从 CoreData 准备异步数据。我按照互联网上的提示进行操作,但有时会出现以下错误: CoreData: 错误: NULL _cd_rawData 但对象没有被转换为错误

这是我的代码,它执行从核心数据读取对象并抛出错误。

func getObject(forKey: String, answer: (Bool, NSObject?) -> ()) {
    let pMOC = initPrivateMOC()
    pMOC.performBlock({
        let fetchRequest = NSFetchRequest()

        let entityDescription = NSEntityDescription.entityForName("CacheObject", inManagedObjectContext: pMOC)

        fetchRequest.entity = entityDescription
        fetchRequest.predicate = NSPredicate(format: "identifier == %@", forKey)


        do {
            let result = try self.managedObjectContext?.executeFetchRequest(fetchRequest) as! [CacheObject]
            var answerObject:NSObject?
            if !result.isEmpty {
                if let coObject = result[0].object {
                    if let retrievedObject = NSKeyedUnarchiver.unarchiveObjectWithData(coObject) as? NSObject {
                        answerObject = retrievedObject
                    }
                }
            }
            answer(true, answerObject)
        } catch {
            answer(false, nil)
            fatalError("[CacheManager:getObject] -> Fehler beim Lesen von Daten")
        }
    })
}

if let coObject = result[0].object 处,错误发生。以下是获取私有(private)MOC的函数:

init() {
    let coreDataHandler = CoreDataHandler(identifier: "MK.SimpleCacheStore", ressource: "SimpleCache")
    self.managedObjectContext = coreDataHandler.getMOC()

}

func initPrivateMOC() -> NSManagedObjectContext {
    let pMOC = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
    pMOC.parentContext = self.managedObjectContext

    return pMOC
}

还有来自上面的类的调用,该调用通过 for 请求进行访问:

public func get(forKey: String, answer: (Bool, NSObject?) -> ()) {
    if let cam = cacheManager {
        if let cachedObj = cam.getObjectFromCache(forKey) {
            print("[SCManager:get] -> Objekt aus NSCache geladen")
            answer(true, cachedObj)
        } else {
            if let cdm = coreDataManger {
                dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), {
                    cdm.getObject(forKey, answer: {
                        success, data in
                        //Enable Entry in NSCache
                        if let cdData = data {
                            cam.saveObjectToCache(forKey, object: cdData)
                            print("[SCManager:get] -> Objekt nach nicht auffinden gecacht")
                        }
                        print("[SCManager:get] -> Objekt nicht in NSCache, deshalb aus CoreData")
                        answer(success, data)
                    })
                })
            }
        }
}

您是否知道这个问题或在我实现 GCD 和 CoreData 的方式中发现任何错误或问题,提示会非常有帮助。

最佳答案

我发现了问题,我没有在我的请求中添加私有(private) MOC。所以解决方案是使用 pMOCfetchRequest()

关于ios - Swift、GCD 和 CoreData 错误 : error: NULL _cd_rawData but the object is not being turned into a fault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38639841/

相关文章:

macos - 子类化 NSManagedObject 的子类

ios - 向继承的属性添加功能

ios - iOS 应用程序的 Facebook 登录在应用程序外部发生

iphone - 如何在iPad上绘制折线图?

objective-c - 拖动 UIScrollView 时出现 EXC_BAD_ACCESS

swift - 如何调用不带参数的泛型函数?

ios - UICollectionView 显示隐藏动画问题

ios - Swift 3 访问 NSUserDefaults 时出错,为什么?

iphone - 使用 Core Data 和 NSManagedObject 保存列表

ios - 如何在它自己的线程中使用核心数据?