IOS / Objective-C / CoreData:将新的托管对象添加到MOC

时间:2017-07-03 18:33:57

标签: ios objective-c core-data

我想在核心数据中向实体添加一些新的托管对象。这些托管对象也由类

表示

每次都需要执行以下操作吗?

 NSEntityDescription *entity = [NSEntityDescription entityForName:@"Steps" inManagedObjectContext:self.managedObjectContext];
        // Initialize Record
        NSManagedObject *blankStep = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:self.managedObjectContext];

或者,如果我有这些对象的数组,我可以只向数组中添加一个新对象然后保存上下文吗?

NSMutableArray <Steps *> *theNewSteps = [NSMutableArray arrayWithCapacity:20];
Steps *blankStep = [[Steps* alloc] init];
[theNewSteps addObject: blankStep];

对这里发生的事感到困惑。

2 个答案:

答案 0 :(得分:2)

  

每次都需要执行以下操作吗?

是,无论是那个还是:

NSManagedObject *blankStep = [NSEntityDescription insertNewObjectForEntityForName:@"Steps" inManagedObjectContext: self.managedObjectContext];

无论哪种方式实例化一个新对象并将其插入到托管对象上下文中。

  

或者,如果我有这些对象的数组,我可以只将新对象添加到数组中,然后保存上下文吗?

没有。核心数据不了解您的阵列,因此它不知道您是否更改了该阵列。另外,这一行:

Steps *blankStep = [[Steps alloc] init];

会失败,因为它会尝试创建一个新的Steps实例,但不会为该类调用指定的初始值设定项。您无法将init用于托管对象,您需要使用第一个代码段或我上面提到的版本。

答案 1 :(得分:-2)

要添加新的托管对象,请使用以下代码。

步骤*步骤= [NSEntityDescription insertNewObjectForEntityForName:@“Steps”inManagedObjectContext:[self managedObjectContext];

//现在你有了Steps对象,如果你想为你可以添加的对象添加值。

//现在保存moc

仍然有任何疑问,请告诉我。