插入NSManagedObject已经实例化的Core Data

时间:2012-04-13 14:23:25

标签: objective-c ios

在apple doc上,要将NSMananagedObject插入Core Data,我们需要这样做:

- (void)insertObject
{
    NSMananagedObject *newObject = (UserInfo*)[NSEntityDescription insertNewObjectForEntityForName:@"myEntity" inManagedObjectContext:self.managedObjectContext];
    [newObject setValue:@"aName" forKey:@"name"];

    NSError *error = nil;
    if (![context save:&error]) {
    }
}

但是如果我的NSManagedObject已经被实例化了,我怎么能把它插入到Core Data而不用'insertNewObjectForEntityForName:inManagedObjectContext'进行重新实例化并复制我的属性?

我想要这样的事情:

- (void)insertObject:(NSManagedObject*) newObject
{
    //[newObject insertForEntity:@"entityName" forContext:context];

    NSError *error = nil;
    if (![context save:&error]) {
    }
}

2 个答案:

答案 0 :(得分:1)

NSManagedObject只需 即可通过将其插入上下文来创建。如果你真的想在一个管理器类中使用它,你需要单独的函数来创建它,然后另一个函数来保存它。 (好吧,你可以有一个创建和保存,但是你必须在修改之后再保存它。)

我会在你的经理班中建议这样的事情:

- (UserInfo*)createNewUserInfoObject {
    return (UserInfo*)[NSEntityDescription insertNewObjectForEntityForName:@"myEntity"
                                                                            inManagedObjectContext:self.managedObjectContext];
}

- (BOOL)saveUserInfoObjects {
    NSError *error = nil;
    if (![self.managedObjectContext save:&error]) {
        return NO;
    }
    return YES;
}

答案 1 :(得分:0)

您必须继承NSManagedObject并进行验证。他们的目的是添加自定义验证。您无需进行任何额外的工作并创建经理。

以下是一些可以帮助您入门的代码。

- (BOOL) validateForInsert:(NSError *__autoreleasing*)error {

    /*! @abstract Validation for Inserting Records */

    BOOL bValidity    = [super validateForInsert:error];
    BOOL bUniqueness  = [self validateUniqueness:error];

    return ( bValidity && bUniqueness );
}

请注意首先调用super。