如何处理使用AFIncrementalStore时返回的部分关系数据?

时间:2013-01-27 11:39:02

标签: iphone ios afnetworking afincrementalstore

尝试AFIncrementalStore,它非常甜蜜。但是我遇到了一个我不完全确定如何处理的场景。

我有一个模型,它返回子关系的id,但不返回内容本身。例如: GET / groups

{"id":3,"description":"My Group","category_id":2}

我可以使用常规GET /类别获取所有类别。但我没有打电话给GET / group / 3 / categories

所以我不知道如何初始化group.category的子关系。我确信我错过了一些明显的东西,但是我们将非常感谢任何帮助。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

使用AFIS时,您存储的每个对象都有资源标识符。在大多数情况下,您希望对象的id为其RI。因此,在这种情况下,category_id是类别对象的RI。因此,您只能使用其category_id创建类别对象。然后,当您获得所有类别时,您将填充类别对象的其他字段。这非常简单,因为AFIS足够聪明。

还有另一种方式。由于您可以使用常规GET /类别获取所有类别,因此每个类别都应包含具有组ID的字段。因此,您可以设置从类别到其组的关系。它会自动产生相反的关系。

答案 1 :(得分:0)

要建立@ nataliq的答案,这必须在你的AFRESTClient的representationsForRelationshipsFromRepresentation:ofEntity:fromResponse:实现中。它应该有关系名称(“category”)作为键,另一个NSDictionary的类别id作为值。如果您的Group对象的Category关系被命名为“category”,并且您标准化了另一个对象的id属性以_id后缀命名,那么您可以执行以下操作:

- (NSDictionary *)representationsForRelationshipsFromRepresentation:(NSDictionary *)representation
                                                           ofEntity:(NSEntityDescription *)entity
                                                       fromResponse:(NSHTTPURLResponse *)response
{
  NSMutableDictionary *mutableRelationshipRepresentations = [NSMutableDictionary dictionaryWithCapacity:[entity.relationshipsByName count]];
  [entity.relationshipsByName enumerateKeysAndObjectsUsingBlock:^(id name, id relationship, BOOL *stop) {
    id value = [representation valueForKey:[(NSString *)name stringByAppendingString:@"_id"]];
    if (value && ![value isKindOfClass:[NSNull class]] &&  ![relationship isToMany]) {
      NSDictionary *valueDict = @{@"id" : value};
      [mutableRelationshipRepresentations setValue:valueDict forKey:name];
    }
  }];

  return mutableRelationshipRepresentations;
}