1

我有一个包含三个实体的核心数据模型:事务、场合、人员,当我当前在事务实体中获取时,我得到“NULL”作为数据库中的值。让我解释。

就我而言,事务是与人员和场合有关系的实体。个人实体具有名称属性和与事务实体的关系。交易(个人实体)< ------ >> whoBy(交易实体)。

还有一个来自categories属性(场合实体)<---------------->>事件(Transaction Entity)的关系。

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

当我将来自用户的插入值直接添加到代表名称属性的 Person 实体时,它起作用了,我在表视图中看到了这一点。场合也是如此(与人分开)。

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

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

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

在表格视图中,我有:

// 有一个叫做 transactions 的 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 属性并且具有相同的结果。

提前致谢

4

1 回答 1

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;

顺便说一句,请务必阅读:核心数据编程指南 - 关系和获取的属性

于 2013-10-07T07:35:58.633 回答