1

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 が既にインスタンス化されている場合、'insertNewObjectForEntityForName:inManagedObjectContext' で再インスタンス化し、属性をコピーせずにコア データに挿入するにはどうすればよいでしょうか?

私はこのようなものが欲しいです:

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

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

2 に答える 2

1

Anは、コンテキストに挿入することによってのみ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;
}
于 2012-04-13T17:06:18.607 に答える
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 );
}

スーパーが最初に呼び出されることに注意してください。

于 2012-04-13T16:49:08.847 に答える