我是核心数据的新手,我创建了2个表,夜晚和会话。我设法创建Night的新对象和Session的新对象。当我尝试这段代码时:
Session * session = [NSEntityDescription insertNewObjectForEntityForName:@"Session" inManagedObjectContext:[[DataManager sharedManager] managedObjectContext]];
Night * night = [NSEntityDescription insertNewObjectForEntityForName:@"Night" inManagedObjectContext:[[DataManager sharedManager] managedObjectContext]];
night.sessions = [NSSet setWithObject:session];
会议进入深夜,很酷的是,当我今晚获取并可以使用以下方式进行会议:
currentNight.Seesion
但我在数据库表中看不到这个链接:(
更新
我的意思是当我写night.sessions = [NSSet setWithObject:session];
时,我需要在表DB中看到(DB.sqlite文件中的是)。
答案 0 :(得分:1)
核心数据不是relational Database
。它构建了自己的结构。它根据您的托管对象定义数据库表结构。对于调试,您可以看到在sqlite上触发核心数据的查询。这将显示核心数据如何从这两个表中获取数据。
你必须去产品 - >编辑方案 - >然后从左侧面板中选择Run yourApp.app
并转到主面板的Arguments选项卡。
您可以添加Argument Passed On Launch
。
您应该添加-com.apple.CoreData.SQLDebug 1
按OK
,即可完成设置。
下次它将显示它运行的所有查询以从表中获取数据。
答案 1 :(得分:0)
我不清楚你的问题是什么。但是:
上下文是一个暂存器。在-save:
之前,其内容不会移动到持久性存储中。如果您放入文件系统并在未保存的情况下检查应用程序之外的持久性商店,则不会在那里记录您的更改。
对于所有商店,磁盘格式未定义且与实现有关。因此,在Core Data之外检查它们并不是为了显示任何特定的结果。
有趣的是,如果你正在使用SQLite存储,那么你应该寻找一个名为Z_SESSIONS的列或类似的东西。它将是一个多值列。其中将是所有链接会话的行ID。 Core Data存储与适当命名的列和直接行ID的关系,这是SQLite隐式提供的。它不使用显式的外键/主键关系。
强调要点:这是核心数据的特定于实现的。它没有被定义为比ARM程序集LLVM为特定代码结构吐出的更可靠。了解CPU如何缓存,分支预测等等,这有助于了解它,但您不应期望能够获取SQLite文件并在其他地方使用它,或通过核心数据以任何方式与其进行交互。