Restkit与(复杂)关系和核心数据/ RAILS

时间:2011-09-13 09:43:19

标签: objective-c ios cocoa-touch core-data restkit

请耐心等待,因为我正在学习Cocoa。我已经阅读了一些关于Core Data的教程,我现在正在处理RESTkit以将其与Rails应用程序一起使用。我还阅读了RESTkit wiki页面上的所有文档,解决方案配方(特别是iOS SDK:Advanced RestKit Development非常有用)。

为了简单起见,我将在这个问题中使用非常有限数量的模型/关系。

假设我有以下模型:公司,人,语言及以下关系:

company many-to-many person
language 1-to-many person

并且RAILS和iOS应用都是同步的。

在某个时间,新人被引入Rails应用程序,该应用程序与现有公司和现有语言相关: 例如。史蒂夫乔布斯>迪士尼,史蒂夫乔布斯>英语 同时将新人添加到新公司和新语言中 例如。 Anna Kourinikova> Nike,Anna Kournikova>俄

现在如何设置同步解决方案?我可以要求所有新人的JSON转储:

[{"person": {
    "id": 123,
    "name": "Steve Jobs",
    "language": {
        "id": 1,
        "name": "English"
    },
    "company": {
        "id": 1,
        "name": "Disney"
    }
  }},
  {"person": {
    "id": 124,
    "name": "Anna Kournikova",
    "language": {
        "id": 22,
        "name": "Russian"
    },
    "company": {
        "id": 47,
        "name": "Nike"
    }
  }}]

现在我的问题:

1)可以(如果是,如何?)RESTkit创建并链接公司和语言。我想现有的公司不是问题,但我的核心数据中还没有新的问题。

2)有没有办法避免包含所有公司和语言数据,就像在现实世界的应用程序中一样,如果将人们添加到现有公司,这将在iOS设备上产生巨大的数据开销

3)可能是首先获取所有新语言,所有新公司然后获取新人的方法,只有与他们相关的语言/公司的id是一种更好的方法(为了节省带宽,但我不是手动做很多事情,RESTkit可以自动完成吗?

4)如果现有人与第二家公司有关系怎么办?

由于这似乎是一个非常真实的世界情况,我觉得奇怪的是文档中没有任何(类似的)示例(如果我能用你的方法解决问题,我愿意写一个关于这个主题的教程帮助。)

1 个答案:

答案 0 :(得分:4)

让我尝试一次解决一个问题:

  1. 是的,通过正确的映射设置,RestKit可以从上面的JSON创建新的公司和语言。
  2. 是的,您可以避免获取嵌套的公司和语言数据,转而使用company_id和language_id外键,这些外键可用于映射时将新Person连接到本地商店中的现有公司和/或语言。查看以下映射API:

    • (void)connectRelationship:(NSString *)relationshipName withObjectForPrimaryKeyAttribute:(NSString *)primaryKeyAttribute;
  3. 对于#3& #4,在具体回答之前,您需要巩固服务器API设计。您已经建议您在问题中使用嵌套的JSON,但也提出了一些问题,建议您不要使用嵌套的JSON,甚至可能将上述JSON分解为多个请求。您在#4中描述的场景可以由RestKit处理,但具体的细节取决于您对服务器的调用以及响应这些调用返回的有效负载。很高兴在这里提供更多帮助,但最终,我非常有信心RestKit可以处理您的用例,您的映射配置的细节很大程度上取决于您最终确定服务器API。