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

Ios 核心数据将对象插入现有对象,ios,swift,core-data,Ios,Swift,Core Data,Swift和iOS最新版本 我创建了一个包含两个实体的核心数据对象模型:所有者和汽车 一个车主可以有多辆车,而一辆车的内部网络只能连接到一个车主。因此,我为汽车创建了一对多,为汽车创建了反向 因此,如果车主被过滤,他的详细信息和汽车可以显示出来,如果一辆汽车被带走,汽车的详细信息和车主可以用于进一步的操作 仅供参考:所有者是唯一的,即我使用户名唯一,因此没有重复的所有者 我创建的一切都正确,我可以添加车主,但我有问题添加车以后 代码: let owner=NSEntityDescription.

Swift和iOS最新版本

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

一个车主可以有多辆车,而一辆车的内部网络只能连接到一个车主。因此,我为汽车创建了一对多,为汽车创建了反向

因此,如果车主被过滤,他的详细信息和汽车可以显示出来,如果一辆汽车被带走,汽车的详细信息和车主可以用于进一步的操作

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

我创建的一切都正确,我可以添加车主,但我有问题添加车以后

代码:

let owner=NSEntityDescription.insertNewObject(forEntityName:“owner”,插入到:objectContext)作为?主人
所有者?.name=“Kaushik”
所有者?.address=“地址”
所有者?.mobile=12345789
所有者?固定电话=123456789
所有者?.userName=“KV”
做
{
尝试objectContext.save()
}抓住
{
打印(“重复输入”)
}
var filteredOwner=[Any]()
var fetchREquest=NSFetchRequest(entityName:“所有者”)
fetchREquest.predicate=NSPredicate(格式:“用户名==%@”,“KV”)
做
{
filteredLender=尝试objectContext.fetch(fetchREquest)
}抓住
{
打印(“错误”)
}
将kvOwner=filteredLender[0]设为?主人
让bd=NSEntityDescription.insertNewObject(forEntityName:“car”,插入到:objectContext)作为?汽车
汽车?.make=“奥迪”
汽车?编号=1234
汽车?.modelname=“A4”
汽车?.owner=kvOwner
kvOwner?.addToCars(汽车!)
做
{
尝试objectContext.save()
}抓住
{
打印(“无法添加汽车\(错误)”)
}
问题是我无法在添加车主后添加汽车。i、 首先添加车主。然后我再次找到车主,然后添加汽车

我故意这样做,以检查它如何工作,如果不是第一次给

但每次我尝试添加新车时,都会出现一个错误“无法添加汽车”

有人能帮我解决这个问题吗

马上谢谢你

let kvOwner = filteredLender[0] as? owner
请尝试以下操作,而不是使用当前代码:

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)")

   }

}

我这样做的方式是..这段代码被添加到Viewdidload()中。因此,每次我启动应用程序时,我都会添加车主,然后将车主取回,然后添加汽车。我这样做的原因是:检查所有者是否是第二次添加的,因为所有者是唯一的。因此,在第一次之后,车主抛出错误duplicate owner,然后我找到车主并尝试添加抛出错误“无法添加汽车”的汽车

根据@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
{
}
var filteredLender=[Any]()
var fetchREquest=NSFetchRequest(entityName:“贷方”)
fetchREquest.predicate=NSPredicate(格式:“用户名==%@”,“KV”)
做
{
filteredLender=尝试objectContext.fetch(fetchREquest)
}抓住
{
打印(“错误”)
}
if(filteredLender.count==0)
{
}否则
{
}

上面的代码只是在添加所有者之前重新安排获取。这样,我检查owner是否可用,然后添加owner和car。如果没有,我已经找到了车主。所以,我只是添加了汽车。最后,这一切都很顺利。似乎问题可能在于重复输入。我试图添加相同的车主每次,我得到重复的错误,每次除了第一次,然后我无法添加汽车。当我移除它时,它工作得很好。我不明白为什么会这样。如果有人能解释这项工作,那将很有帮助。谢谢

我建议您阅读中关于可选绑定的部分,并在代码中采用这种方法。然后可以看到这些变量中的哪一个(如果有的话)为零,这将有助于诊断问题。这里没有零。我只是添加了我尝试的carYep。它进入for循环,但仍然抛出一个错误“无法添加car”
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
{
}