通过使用核心数据的关系获取属性的值 – 当前传递NULL

我有一个包含三个实体的核心数据模型:Transaction,Occasion,Person以及当前我在Transaction Entity中获取数据的时候,我得到了“NULL”作为数据库中的值。 让我解释。

在我的情况下,交易是与Person和Occasion有关系的实体。 个人实体具有名称属性和与交易实体的关系。 交易(Person Entity)<—— >> whoBy(交易实体)。

从类别属性(场合实体)<—————- >>事件(事务实体)也有关系。

我在这个应用程序的基本阶段。 我有一个表视图控制器,当你按下加号button时,你会被要求在模态视图中添加名称和场合。 最终,两者都将显示在表视图中,名称是单元格的主文本,并且是副标题。

当我将用户插入的值直接添加到Person实体(代表name属性)时,它的工作原理和我在Table View中看到的一样。 同样的情况(分开给Person)。

但是,当我直接将数据添加到交易实体并使用fetchRequest来实现时,每次按保存传递值并返回到表视图时,我都会显示(NULL)。

我的AddEntryVC在保存button方法中有这个:

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)作为保存的结果。 当我运行相同的代码,直接修改交易成为人,包括MutableArray,它的工作原理。

所以我几乎在那里..但真的很感谢任何帮助。 我感觉whoBy.name的关系不起作用。 因为这是一种关系。 我无法想象我必须去设置Person.name属性; 它应该只与交易?

我也在提取请求下面尝试了一个谓词:

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

.. personTransaction是一个@property(nonatomic,strong)Person * personTransaction属性,它有相同的结果。

提前致谢

当你在一个关系上进行操作时,你必须手动创build所有的实体,例如你必须replace:

 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; 

顺便说一句,确保阅读: 核心数据编程指南 – 关系和获取属性 。