使用 MagicalRecord 使用当前实体创建新实体

Posted

技术标签:

【中文标题】使用 MagicalRecord 使用当前实体创建新实体【英文标题】:Create new entity with current entity using MagicalRecord 【发布时间】:2012-06-07 18:42:07 【问题描述】:

我正在尝试使用现有实体(传入)设置所有值来创建一个新实体。这是我在托管对象子类中使用的类方法:

+(FlightManifest *)getNextFlightManifestLegWithFlightManifest:(FlightManifest *)fm 
    // Get the current context
    NSManagedObjectContext *moc = [NSManagedObjectContext MR_contextForCurrentThread];

    // Set a var to the cur leg so we can use it to increment the leg number later
    NSInteger curLeg = [fm.leg intValue];

    // Check to see if we already have the next leg saved
    if ([self getFlightManifestWithTripID:fm.tripid andLeg:[NSNumber numberWithInt:curLeg + 1]] !=nil) 
        return [self getFlightManifestWithTripID:fm.tripid andLeg:[NSNumber numberWithInt:curLeg + 1]];
     else 
        // Create a new leg using the passed in FlightManifest for the values
        FlightManifest *newFM = [FlightManifest MR_createInContext:moc];  

        // Set the value of the newly created object to the one passed in
        newFM = fm;

        // Increment the leg number
        newFM.leg = [NSNumber numberWithInt:curLeg + 1];

        // Save the object
        [moc MR_save];

        return newFM;
    

我这样称呼它:

- (IBAction)nextLegButtonPressed:(id)sender 

    currentFlight = [FlightManifest getNextFlightManifestLegWithFlightManifest:currentFlight];
    self.legNumberLabel.text = [currentFlight.leg stringValue];
    [self reloadLegsTableViewData];

正在发生的事情是我正在更改当前实体而不是创建一个新实体。关于我做错了什么有什么想法吗?

【问题讨论】:

您需要分享MR_createInContext的代码 这是 MagicalRecord API 的一部分 【参考方案1】:

这似乎很明显,但这条线似乎很可疑:

// Set the value of the newly created object to the one passed in
    newFM = fm;

这将在使用现有 fm 对象后生成代码...并更改您尝试复制的那个...

【讨论】:

是的,我正在尝试从传入的属性中复制所有属性,然后更改其中一个属性(腿)。由于 ManagedObjects 没有复制方法,我不确定除了像这样设置每个属性之外还能做什么: newFM.tripid = fm.tripid; ...顺便说一句,这很有效,但它肯定不是最有效的方法。 这正是您需要做的 :( 如果您从一个托管对象执行深层复制到另一个托管对象,您实际上将复制整个对象图。在这种情况下,手动复制属性似乎是最好的方法。 好的,如果您在回答中添加最后一条评论,我会接受。谢谢。

以上是关于使用 MagicalRecord 使用当前实体创建新实体的主要内容,如果未能解决你的问题,请参考以下文章

使用 Magicalrecord 拥有单个实体的最佳方式

如何在 MagicalRecord saveWith Block 之外创建核心数据实体

在 Swift 中使用 MagicalRecord 实例化的向下转型 CoreData 实体

使用 MagicalRecord 插入后 CoreData 关系未更新

使用 Magical Record 添加到创建的实体属性

MagicalRecord 入门