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