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