0

使用 AFIncrementalStore 进行试验,它非常甜蜜。但是,我遇到了一个我不完全确定如何处理的情况。

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

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

我可以使用常规的 GET /categories 获取所有类别。但我没有调用 GET /group/3/categories

所以我不知道如何初始化group.category的子关系。我确定我遗漏了一些明显的东西,但任何帮助将不胜感激。

有什么建议么?

4

2 回答 2

0

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

还有另一种方法。由于您可以使用常规 GET /categories 获取所有类别,因此每个类别都应该有带有组 ID 的字段。因此,您可以设置从类别到它们的组的关系。它会自动建立反向关系。

于 2013-11-14T13:16:55.487 回答
0

为了建立@nataliq 的答案,这必须在您的 AFRESTClient 的representationsForRelationshipsFromRepresentation:ofEntity:fromResponse:. 它应该以关系名称(“类别”)作为键,另一个以类别的 id 作为值的 NSDictionary。如果您的 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;
}
于 2013-12-16T18:31:49.757 回答