2012-11-14 73 views
0

我有一個非常簡單的應用程序的基礎,到目前爲止,用戶在其中輸入一個人的名字和姓氏,然後有兩隻文本框,當他們點擊保存按鈕下面的代碼運行:CoreData NSManagedObject不節能

person = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext]; 

NSError *err; 
    if (![managedObjectContext save:&err]) 
    { 
     // Update to handle the error appropriately. 
     NSLog(@"Unresolved error %@, %@", err, [err userInfo]); 
     exit(-1); // Fail 
    } 

所以我有一個Person對象,我設置的第一個和最後一個名字,因爲用戶鍵入到文本字段中,然後在選擇保存時插入對象。但是,在保存之後,名字和姓氏顯示爲(null)。我已經正確連接了所有的插座和方法,所有代碼正在運行以設置並保存名稱/對象。

但是,如果我這樣做的主視圖:

Person *p = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext]; 

PersonDetailViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"PersonDetail"]; 
    vc.managedObjectContext = fetchedResultsController.managedObjectContext; 
    vc.person = p; 

然後保存我的對象,該值不(null)。我試圖在決定保存後插入新對象,而不是創建它,然後刪除它,如果取消更清晰和更邏輯的代碼。希望你能幫助。

任何想法?

謝謝。

+0

它是在兩種情況下相同的managedObjectContext?或者第一個案例使用單獨的還是兒童的MOC? –

+0

第一種情況使用相同的MOC。就像在第二種情況下一樣,它從主視圖控制器傳遞下來。唯一不同的是我在MOC傳遞之前或之後插入對象。 –

+0

這只是一個想法,因爲它讓我想起了這個問題:http://stackoverflow.com/questions/12875749/pass-array-of-nsmanagedobjects-to-a-new-view其中屬性成爲無後MOC有被釋放。 –

回答

0

變成我的Person對象返回零。

解決方案: 使用nil上下文初始化一個Person對象,以便它不被插入但不爲零。這樣我就可以確定它的變量來存儲諸如名和姓之類的東西,然後插入如下所示。

person = [[Person alloc] initWithEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext] insertIntoManagedObjectContext:nil]; 

Person *p = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext]; 
     p.firstName = person.firstName; 
     p.lastName = person.lastName; 

這幫助我達到這一點: Is there a way to instantiate a NSManagedObject without inserting it?

相關問題