我正在尝试使用核心数据存储和检索数据。我很擅长与双实体合作,但目前正试图访问一个两级深度的(PRC)实体。
目前,我的模型由Fpga实体,会话实体和PRC实体组成。 Fpga实体与会话实体具有一对多的关系。会话实体与PRC实体具有一对一的关系。 PRC实体由两个属性prc0和prc1组成。
我目前正在填充模型:
Fpga *newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"Fpga" inManagedObjectContext:self.managedObjectContext];
newEntry.name = self.fpgaTextField.text;
Session *session0 = [NSEntityDescription insertNewObjectForEntityForName:@"Session" inManagedObjectContext:self.managedObjectContext];
session0.type = self.s0TextField.text;
//--------
session0.prc.prc0 = [NSNumber numberWithInt:99];
session0.prc.prc1 = [NSNumber numberWithInt:113];
//--------
Session *session1 = [NSEntityDescription insertNewObjectForEntityForName:@"Session" inManagedObjectContext:self.managedObjectContext];
session1.type = self.s1TextField.text;
//------
session1.prc.prc0 = [NSNumber numberWithInt:[ self.p0TextField.text intValue]];;
session1.prc.prc1 = [NSNumber numberWithInt:[ self.p1TextField.text intValue]];;
//------
newEntry.session = [NSSet setWithObjects:session0, session1, nil];
尝试检索PRC数据(例如,数据库中只有一个对象用于演示):
PRC *prc0 = (PRC*)[[[fpgaObj.session allObjects] objectAtIndex:0] prc];
self.p0TextField.text = [NSString stringWithFormat:@"%@", prc0.prc0];
我总是返回null,但所有其他Fpga和Session属性都没问题。显然有些事情错了......但不确定是什么......
提前致谢
答案 0 :(得分:1)
您不会创建PRC
个对象,因此session0.prc
和session1.prc
是nil
。
例如:
PRC *prc = [NSEntityDescription insertNewObjectForEntityForName:@"PRC" inManagedObjectContext:self.managedObjectContext];
prc.prc0 = [NSNumber numberWithInt:99];
prc.prc1 = [NSNumber numberWithInt:113];
session0.prc = prc;
答案 1 :(得分:0)
在session0.prc.prc0 = ...
之前,您需要创建PRC
实体的实例。您通常会创建并配置此实例,然后将其设置为关系的内容(session0.prc = ...
)。目前,您正在尝试将数字设置为不存在的实例。