Core data 核心数据一对一关系无法正常工作

Core data 核心数据一对一关系无法正常工作,core-data,relationship,nsfetchrequest,one-to-one,Core Data,Relationship,Nsfetchrequest,One To One,我有两个实体叫做单词和句子。在每个实体中都有一个分别称为单词和句子的属性。这种关系是反向的,不是可选的,是一对一的 我能够分别从两个实体中提取记录,但不知何故,我无法通过一个实体获取相关对象,我做错了什么? 上面的代码可以工作,它只打印单词对象的值和句子对象的值(null)。。。我使用sqlite作为这个数据库的源代码。我填充了sqlite文件,该文件是在对我的模型建模后由Xcode创建的。对于核心数据模型,sqlite表如下所示: // Test listing all words with

我有两个实体叫做单词和句子。在每个实体中都有一个分别称为单词和句子的属性。这种关系是反向的,不是可选的,是一对一的

我能够分别从两个实体中提取记录,但不知何故,我无法通过一个实体获取相关对象,我做错了什么?
上面的代码可以工作,它只打印单词对象的值和句子对象的值(null)。。。我使用sqlite作为这个数据库的源代码。我填充了sqlite文件,该文件是在对我的模型建模后由Xcode创建的。

对于核心数据模型,sqlite表如下所示:

// Test listing all words with their sentence
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Word"
                                          inManagedObjectContext:context];
[fetchRequest setEntity:entity];
[fetchRequest setFetchLimit:10];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

 for (Word *info in fetchedObjects) {
     NSLog(@"Word object: %@", info.word);
     Sentence *details = info.relatedToSentence;
     NSLog(@"Sentence object: %@", details.sentence);
 }
其中ZRELATEDTOWORD是相关单词的主键(Z_PK),ZrelatedToContent 相关句子的主键。两者都必须正确填写

但是:请注意,不建议修改核心数据SQLite文件,并且 容易出错。该格式没有正式记录,将来可能会更改

我仍然建议编写一个单独的命令行工具(可以使用相同的核心数据) 使用核心数据方法创建和填充
初始数据库。

代码看起来正常。如果
info.relatedtoEntence
打印为(null),则单词对象与句子对象无关。你是如何填写sqlite文件的?@martin是的,我应该如何建立关系?我通过在zword和zsentence的表中插入一个字符串值来填充它,即两个单独的表zword和zsentence。为什么不使用核心数据填充初始数据库?编写一个小型命令行工具,用于创建数据库并创建托管对象和关系。不建议直接修改sqlite文件,而且容易出错。-(在您的情况下,ZSENTENCE将有一个ZRELATEDTOWORD列,ZWORD将有一个ZrelatedToContent列,两者都必须正确填写。)@martin因为它是一个巨大的数据库,所以我必须预先填充它。我现在用5个值进行测试,但仍然不起作用。真正地我在sqlite中看到ZRELATEDTOWORD和ZrelatedToContent,是的,我应该用什么填充它们?我的意思是,您编写一个单独的工具,只运行一次来创建数据库,然后将数据库作为资源复制到实际项目中。-(ZRELATEDTOWORD是相关单词的主键,ZRELATEDTOWORD是相关句子的主键。)谢谢。一个单独的用于预填充的工具应用程序是一个好主意!
CREATE TABLE ZSENTENCE ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZRELATEDTOWORD INTEGER, ZSENTENCE VARCHAR );
CREATE TABLE ZWORD ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZRELATEDTOSENTENCE INTEGER, ZWORD VARCHAR );