CoreData项目错误NULL _cd_rawData,但没有将对象变成故障

时间:2019-02-04 05:31:29

标签: swift runtime-error

我收到错误 CoreData:故障:_cd_rawData为NULL,但是该对象未转换为故障。 我已经看过许多与此问题相关的问题,它们都引用了线程问题,但是我正在使用NSPersistentContainer.viewContext在主线程上进行所有操作。

当我第一次引用实体类型为[Double]的Swift数组的可转换类型的Entity属性时,就会出现问题。后续访问不显示错误。该错误也不会造成整体程序故障,并且继续执行。

由于许多其他问题表明这是线程并发问题,因此我使用“ -com.apple.CoreData.ConcurrencyDebug 1”运行该程序,但是当控制台中出现错误时,ConcurrencyDebug标志不会引发预期的错误。

下面是我的提取请求的代码。

我以编程方式在SMLocation和FlatPricing之间设置了一个关系。 FlatPricing的数组属性有问题,但是只有我第一次访问该属性的值。

public class FlatPricing: NSManagedObject {
    ....

    @NSManaged public var monthlyRate: [Double]? 
    @NSManaged public var monthlyUseCap: [Double]? 
    @NSManaged public var householdsAtCap: [Int]?

   ....
 }


func fetchThenSetManagedObjects(forLocation loc: String) -> SMLocation? {

        let fetchReq: NSFetchRequest<SMLocation> = SMLocation.fetchRequest()
        fetchReq.resultType = .managedObjectResultType
        fetchReq.predicate = NSPredicate(format: "smlName == %@",loc)

        var fetchRes: [SMLocation] = [SMLocation]()
        do {
            fetchRes = try persistentContainer.viewContext.fetch(fetchReq)
        } catch {
            print("Core Data Fetch failed")
            print(error)
            return nil
        }

        // now set all the managed objects
        return fetchRes[0]

    }

我在代码的各个部分中像这样设置FlatPricing对象:

....

guard let smLoc = fetchThenSetManagedObjects(forLocation: currentLocation) else {
       print("Fetch failed for locationSelect")
        return
    }
let initFlatPricing = (smLoc.value(forKey: "flatPricing") as! FlatPricing)

当我访问属性时 喜欢:

guard var h = initFlatPricing.householdsAtCap else {
    return
}

h[0] = 12

该分配触发错误。但是,随后对该数组属性或任何其他数组属性的分配都可以正常工作。

0 个答案:

没有答案