当我将数据插入CoreData的一个实体时,所有行都成功插入(已保存)。
但是当我尝试使用FetchRequest获取数据时,即使插入的行数为3或4或任何(大于1),也只会出现一行数据。 没有获取剩余的行。当我打印获取结果时,
它说 - 错误
0:<EquipmentDetails: 0x6000000bad60>
(entity: EquipmentDetails; id: 0xd000000000040000
coredata:/EquipmentDetails/p1> **data:fault>)**
我没有得到核心数据后端的内容?
func insertEqipToLocalDb()
{
let mobileNo : String = UserDefaults.standard.string(forKey: "phoneNumber")!
let equipDetailsItem = NSEntityDescription.insertNewObject(forEntityName: "EquipmentDetails", into:managedObjContext) as! EquipmentDetails
for (index,item) in array_IDEquip.enumerated()
{
equipDetailsItem.mobileNumber = mobileNo
equipDetailsItem.type = array_typeEquip[index]
equipDetailsItem.name = array_nameEquip[index]
equipDetailsItem.startDate = array_sDateEquip[index]
equipDetailsItem.endDate = array_eDateEquip[index]
equipDetailsItem.equpID = Int16(item)
equipDetailsItem.serviceDatesStr = array_serviceDateEquip[index]
}
do
{
try managedObjContext.save()
UserDefaults.standard.set("AlreadyInstalled", forKey: "statusInstallation")
}
catch
{
Exception.insertExceptionDetails(errorMsg: error as NSError, context: managedObjContext)
}
}
//用于获取的代码
let request = NSFetchRequest<NSFetchRequestResult>()
let entity = NSEntityDescription.entity(forEntityName:"EquipmentDetails", in: managedObjContext)
request.entity = entity
do
{
let fetchResults = try managedObjContext.fetch(request)
for r in fetchResults
{
typeEquipArray.append((r as AnyObject).value(forKey: "type") as! String)
}
}
catch let error as NSError
{
Exception.insertExceptionDetails(errorMsg: error, context: managedObjContext)
}
答案 0 :(得分:0)
在这一行:
let equipDetailsItem = NSEntityDescription.insertNewObject(forEntityName: "EquipmentDetails", into:managedObjContext) as! EquipmentDetails
您创建一个实例。在随后的循环中,您可以在同一个实例上一遍又一遍地设置type
,name
等属性的值。然后保存更改,其中只包含一个对象。如果你希望循环中的每次传递都有EquipmentDetails
的差异实例,则需要在循环内创建实例。
除非您尝试访问属性值并发现它们不存在,否则“fault”消息不是错误。它是Core Data工作方式的一部分。请参阅Harshal Valanda在评论中链接的答案以获取更多详细信息。