使用核心数据通过关系获得一个属性的值 - 目前传递NULL(Obtaining values of

2019-10-18 17:42发布

我有三个实体核心数据模型:交易,场合,人物,当我目前在交易实体获取,我得到“NULL”作为数据库中的值。 让我解释。

交易是在我的情况下,有个人和场合关系的实体。 该人士实体都有一个name属性和交易实体的关系。 交易(Person实体)<------ >> whoBy(交易实体)。

还有一个从类别属性(际实体)<---------------- >>事件(事务实体)的关系。

我在这个应用程序的基本阶段。 我有一个表视图控制器,当您按下加号按钮,系统会询问,在模式视图,添加的名称和场合。 最终,两人都会被显示在表视图的名称是细胞的主要文本和一次是字幕。

当我从用户直接添加插入值,以Person实体,代表name属性,它的工作原理,我看到这个表视图。 这同样适用场合(单独对个人)。

然而,当我直接的数据添加到交易实体,并使用fetchRequest带来的是,每次我按时间保存传递价值,并返回到表视图,我带有(NULL)。

我AddEntryVC有这样的保存按钮方法:

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

在表视图,我有:

//还有就是NSMutableArray的属性称为交易持有交易NSFetchRequest * fetchRequest = [[NSFetchRequest页头] initWithEntityName:@ “交易”]; self.transactions = [[managedObjectContext executeFetchRequest:fetchRequest误差:无] mutableCopy];

//在的cellForRowAtIndexPath NSManagedObject *交易= [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(非原子,强)人* personTransaction性能,并且具有相同的结果。

提前致谢

Answer 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请务必阅读: 核心数据编程指南-关系并取出属性 。



文章来源: Obtaining values of an attribute through relationships using Core Data - Currently passing NULL