核心数据将对象插入现有对象

时间:2017-01-09 19:55:49

标签: ios swift core-data

Swift和iOS最新版本

我创建了一个核心数据对象模型,它包含两个实体:所有者和汽车。

所有者可以拥有多辆汽车,并且汽车仅与一位车主相连。因此,我创造了一对多的汽车和倒车的汽车。

因此,如果过滤所有者,则可以显示他的详细信息和汽车,如果购买了汽车,则可以使用汽车详细信息和汽车所有者继续行驶。

仅供参考:所有者是唯一的,即我使用户名唯一,因此没有重复的所有者

我正确地创建了所有内容,我可以添加所有者,但我以后添加汽车时遇到问题。

代码:

 let owner = NSEntityDescription.insertNewObject(forEntityName: "owner", into: objectContext) as? owner

    owner?.name="Kaushik"
    owner?.address="address"
    owner?.mobile=12345789
    owner?.landline=123456789
    owner?.userName="KV"

    do
    {
        try objectContext.save()

    }catch
    {
        print("duplicate input")
    }


        var filteredOwner = [Any]()
      var  fetchREquest = NSFetchRequest<NSFetchRequestResult>(entityName: "owner")
        fetchREquest.predicate=NSPredicate(format: "userName == %@","KV")
        do
        {
            filteredLender = try objectContext.fetch(fetchREquest)

        } catch
        {
            print("error")
        }

        let kvOwner = filteredLender[0] as? owner


        let bd =  NSEntityDescription.insertNewObject(forEntityName: "car", into: objectContext) as? car

    car?.make="Audi"
    car?.number=1234
    car?.modelname="A4"
   car?.owner=kvOwner

    kvOwner?.addToCars(car!)
    do
    {
       try objectContext.save()

    }catch
    {
        print("unable to add car\(error)")

    }

问题是在添加所有者后我无法添加汽车。即添加第一个所有者。然后我再次获取所有者然后添加汽车

如果没有第一次给出,我故意这样做以检查它是如何工作的。

但我收到错误&#34;无法添加汽车&#34;每次我尝试添加一辆新车。

有人可以帮我解决这个问题吗?

谢谢

2 个答案:

答案 0 :(得分:0)

Right after

let kvOwner = filteredLender[0] as? owner

Try this instead of your current code:

if let bd =  NSEntityDescription.insertNewObject(forEntityName: "car", into: objectContext) as? car {

   bd.make="Audi"
   bd.number=1234
   bd.modelname="A4"
   bd.owner=kvOwner

   do {
     try objectContext.save()

   } catch {
       print("unable to add car\(error)")

   }

}

答案 1 :(得分:0)

我这样做的方式是......这个代码是在Viewdidload()中添加的。因此,每次我启动app.I添加所有者然后我取回所有者然后添加汽车。我这样做的原因是:检查所有者是否第二次添加,因为所有者是唯一的。因此,在第一次之后,所有者抛出错误重复所有者,之后我获取所有者并试图添加抛出错误的汽车&#34;无法添加汽车&#34;。

根据@Maor Duani的建议,我在添加汽车之前添加了一个if条件,但这并没有解决问题。相反,我尝试了别的东西,我在所有者之前添加了一个条件来检查所有者是否已经存在,如

var filteredLender = [Any]()
    var  fetchREquest = NSFetchRequest<NSFetchRequestResult>(entityName: "Lender")
    fetchREquest.predicate=NSPredicate(format: "userName == %@","KV")
    do
    {
        filteredLender = try objectContext.fetch(fetchREquest)

    } catch
    {
        print("error")
    }
if(filteredLender.count==0)
{
}else
{
}

上面的代码只是在添加所有者之前重新排列提取。通过这种方式,我检查所有者是否可用,然后添加所有者和汽车。如果没有,我已经拥有了所有者。所以,我只是添加汽车。最后,这很好。似乎问题可能是重复输入。我试图每次添加相同的所有者,我每次都会出现重复错误,除了第一次然后我无法添加汽车。当我删除它,它工作正常。我不明白为什么会这样。如果有人能解释这个工作,那将会有所帮助。谢谢