FetchRequst数据错误问题

时间:2017-03-10 07:19:01

标签: ios swift core-data nsfetchrequest

当我将数据插入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)
}

1 个答案:

答案 0 :(得分:0)

在这一行:

let equipDetailsItem = NSEntityDescription.insertNewObject(forEntityName: "EquipmentDetails", into:managedObjContext) as! EquipmentDetails

您创建一个实例。在随后的循环中,您可以在同一个实例上一遍又一遍地设置typename等属性的值。然后保存更改,其中只包含一个对象。如果你希望循环中的每次传递都有EquipmentDetails的差异实例,则需要在循环内创建实例。

除非您尝试访问属性值并发现它们不存在,否则“fault”消息不是错误。它是Core Data工作方式的一部分。请参阅Harshal Valanda在评论中链接的答案以获取更多详细信息。