2012-04-13 99 views
1

蘋果文檔,插入一個NSMananagedObject到核心數據,我們需要這樣做:插入NSManagedObject已經實例化核心數據

- (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]) { 
    } 
} 
+0

咦?如果它已經存在,則不需要再次插入它...只需更改並調用保存 – borrrden 2012-04-13 14:28:30

+0

否,我剛創建的新對象,但我想使用保存在Core Data中的'manager class'這就是爲什麼我的對象是在ViewController中實例化的,我稱Manager類爲保存對象 – booker 2012-04-13 14:30:06

+0

您可以通過調用insertNewObject方法來創建它。 – borrrden 2012-04-13 14:31:13

回答

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; 
} 
+0

聰明!非常感謝! – booker 2012-04-16 19:34:37

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); 
} 

請注意,超級被稱爲第一。