我收到错误 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
该分配触发错误。但是,随后对该数组属性或任何其他数组属性的分配都可以正常工作。