0
// 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);
 }

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

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

4

1 回答 1

1

对于您的核心数据模型,SQLite 表如下所示:

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 );

其中 ZRELATEDTOWORD 是相关词的主键(Z_PK),ZRELATEDTOSENTENCE 是相关句子的主键。两者都必须正确填写。

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

我仍然建议编写一个单独的命令行工具(它可以使用与您的主项目相同的 Core Data 模型),它使用 Core Data 方法来创建和填充初始数据库。

于 2013-08-12T08:37:44.150 回答