2013-10-07 23 views
1

我有一個核心數據模型,包含三個實體:事務,場合,人員以及當前我在事務實體中獲取時,我得到「NULL」作爲數據庫中的值。讓我解釋。通過使用核心數據通過關係獲取屬性的值 - 當前傳遞NULL

交易是在我的情況下,與Person和Occasion有關係的實體。個人實體具有名稱屬性和與交易實體的關係。交易(Person Entity)< ------ >> whoBy(交易實體)。

從類別屬性(場合實體)< ---------------- >> event(Transaction Entity)也有關係。

我在這個應用程序的基本階段。我有一個表視圖控制器,當你按下加號按鈕時,你會被要求在模態視圖中添加名稱和場合。最終,兩者都將顯示在表視圖中,其名稱是單元格的主文本,並且是副標題。

當我將用戶插入的值直接添加到表示name屬性的Person實體時,它起作用,我在Table View中看到了這一點。同樣的情況也會發生(與Person分開)。但是,當我直接將數據添加到事務實體並使用fetchRequest來實現這一點時,每次按save以傳遞該值並返回到表視圖時,我都會顯示(NULL)。

我AddEntryVC有這樣的保存按鈕方法:

NSManagedObject *newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"Transaction" inManagedObjectContext:context]; 
[newEntry setValue:self.nameTextField.text forKeyPath:@"whoBy.name"]; 

表視圖,我有:

//有NSMutableArray的屬性稱爲交易持有交易 NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@「Transaction」]; self.transactions = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

//在cellForRowAtIndexPath中 NSManagedObject * transaction = [self.transactions objectAtIndex:indexPath.row];

[cell.textLabel setText:[NSString stringWithFormat:@"%@", [transaction valueForKeyPath:@"whoBy.name"]]]; 

當我運行這一點,有沒有錯誤/警告,當我添加一個條目,我看到(NULL)作爲保存的結果。當我運行相同的代碼時,只需將Transaction直接修改爲Person,包括MutableArray,它就可以工作。

所以我幾乎在那裏......但真的很感謝任何幫助。我覺得whoBy.name的關係不起作用。因爲這是一種關係。我無法想象我必須去設置Person.name屬性;它應該只與交易一起工作?

我還試圖找取請求下面謂詞:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@ 「whoBy.name =%@」,self.personTransaction.name];

..其中personTransaction是一個@property(nonatomic,strong)Person * personTransaction屬性,它具有相同的結果。

在此先感謝

回答

1

當您在您必須手動創建所有實體的關係,例如操作必須更換:

NSManagedObject *newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"Transaction" inManagedObjectContext:context]; 
[newEntry setValue:self.nameTextField.text forKeyPath:@"whoBy.name"]; 

的東西,如:

NSManagedObject *transaction = [NSEntityDescription insertNewObjectForEntityForName:@"Transaction" inManagedObjectContext:context]; 
NSManagedObject *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context]; 
person.name = self.nameTextField.text; 
transaction.whoBy = person; 

BTW務必閱讀:Core Data Programming Guide - Relationships and Fetched Properties

+0

這就是輝煌的Arkadiusz - 這是非常有用的,它的工作完全。這個鏈接的確非常有用。再次感謝! – amitsbajaj

相關問題