gpt4 book ai didi

swift - 如何将嵌套对象添加到核心数据中的现有对象

转载 作者:行者123 更新时间:2023-11-28 13:14:26 26 4
gpt4 key购买 nike

我有一对多对象 Driver <-->> Car .
类:

class Driver: NSManagedObject {
@NSManaged var fullName: String
@NSManaged var cars: NSSet
}
class Car: NSManagedObject {
@NSManaged var model: String
@NSManaged var year: String
@NSManaged var driver: Driver
}

我插入了一个 Driver 和一些汽车对象。
但我不知道更新汽车列表以添加或删除某些汽车对象的正确方法是什么。
有线,但我在网上找不到任何示例如何执行此操作。
那么如何为现有司机添加新车或从中移除汽车呢?

更新我尝试过类似的方法,但它在数据库中保存了新车,但这些新车与驾驶员无关。
当我在 cars:NSSet 中获取驱动程序时我还有一辆车。

let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext;

var newCar:Car = NSEntityDescription.insertNewObjectForEntityForName("Car", inManagedObjectContext: context!) as! Car

newCar.year = "1977";

var cars = driver?.cars.allObjects as! [Car]

cars.append(newCar)

var err: NSError?;

context?.save(&err);

最佳答案

编辑:我刚刚意识到你要求 swift,我不知道。那时我的回答并不是真的有效,但我们只希望你能通读它:)无论如何逻辑都是一样的,所以我不会删除它。

我会引用 Mundi 的回答,说您在使用核心数据模型构建模型后应该使用自动生成的文件。这是非常简单和有效的。而且速度很快。

要将子对象添加到您的对象,您只需要

  1. 获取或创建您的对象
  2. 创建子对象的新实例
  3. 将这些实例添加到您的“包含”对象中。
  4. 保存managedObjectContext

    //A method that returns your object 
    -(Car*)getCarById:(NSString*)carId inContext:(NSManagedObjectContext*)context{
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Cars" inManagedObjectContext:context];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entityDescription];

    //NSPredicate has to be used to fetch the correct car. I'll assume you know that.

    NSError *error;
    NSArray *array = [context executeFetchRequest:request error:&error];
    if (array.count > 0)
    return (array.firstObject);
    }

如果此方法没有返回您的 Car/Driver,请创建它。

Car *car = [self getCarById:myId inManagedObjectContext:context];
if(!car)
{
car = [NSEntityDescription insertNewObjectForEntityForName:@"Car" inManagedObjectContext:context];
}

您现在拥有您的对象,以及所有它的子对象(如果有的话)(即使处于故障状态)。

现在如果我有一个 Driver 对象(我使用相同的方法得到的),我可以简单地使用

[car addDriver:driver];

因为这个方法是在我创建模型时自动生成的。

如果你有自己的司机,你可以往上再给他一辆车

driver.car = car;

在朝那个方向进行时我还没有真正测试过,但我认为你应该没问题,当涉及到像这样简单的东西时,核心数据非常强大。

此外,这对我来说非常模糊,addDriver:可能是 addObject 或 setDriver,也可能是 insertDriver。我不完全记得,但无论如何你应该能够在 .h 文件中找到它们。 :)

关于swift - 如何将嵌套对象添加到核心数据中的现有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29645624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com