coredata从一个表中获取列表,从另一个表中获取详细信息而没有关系

时间:2016-12-01 14:29:51

标签: ios core-data

我有两个实体

第一个 -

{
          "ID": 5777,
          "Name": "",
          "EventID": 18341,
          "ParentID": 19702,
          "LastModifiedDate": "2016-11-30 09:36:04",
          "EntityType": 3,
          "InstanceID": 916787
        }

2d one

{
          "ID": 19702,
          "Name": "Google",
          "EventID": 18341,
          "ParentID": 0,
          "LastModifiedDate": "2016-12-01 06:20:49",
          "EntityType": 0,
          "FileAttribute": "",
          "InstanceID": 0,
          "IsFile": false,
          "ResourceURL": "http://www.google.com",
          "Taxonomies": "0",
          "ViewCount": 2
        } 

现在需要使用" ID"从第二个获取是" ParentID"第一个使用核心数据。

MySql query will "SELECT * FROM "tbl_two" WHERE `ID` IN ( SELECT `ParentID` FROM "tbl_ONE" WHERE `InstanceID` = '916787' AND `EventID` = '18341')

1 个答案:

答案 0 :(得分:0)

第一步是停止考虑核心数据,就像它的SQL 一样。它有一个不同的API,用SQL术语思考会导致你的设计很差。

一般而言,不要考虑记录,考虑可能在应用程序中使用的对象以及这些对象如何相互关联。不使用外键将一个记录与另一个记录相关联,而是使用对象属性将一个对象与另一个对象相关联。

从我的SQL查询中可以看出,你需要像

这样的东西
  • 两个核心数据实体名为Resource(您的第一个样本)和ResourceMapping(您的第二个样本)。
  • Resource有一个名为mapping的属性,类型为ResourceMapping
  • 您使用关系相互关联,而不是ID。如果需要将数据同步到远程服务器,则可以存储ID,但它们在核心数据中通常没用。

我认为相当于你的SQL查询:

  1. 使用与其中一个或多个属性匹配的Resource获取NSPredicate(第一个示例)的单个实例。
  2. 当您拥有该实例时,请询问其关系mapping(或您所称的任何内容)的值,并且您将从另一个实体获取相关对象。
  3. 除此之外,Apple提供了extensive, detailed documentation with code samples,这将有所帮助。