AFIncrementalStore:仅提取ID为的相关实体



我在Mac应用程序中使用App.net消息API,该应用程序使用带有AFIncrementalStore的核心数据。我有一个渠道实体,它有几种不同的方式与用户实体相关。有一种"所有者"关系,它很简单,运行良好。但也有两个ACL实体:Channel的读者和作者。

ACL只是一个键值对象,它包括一组用户ID,我不知道如何使用AFIncrementalStore来处理这种关系。

我正在提取一个Channel实体,它附加了一个ACL对象("写入程序"),其中包含一个用户ID数组:

"writers": {
    "any_user": false,
    "immutable": true,
    "public": false,
    "user_ids": [
        "1",
    ],
    "you": true
},

我已经在核心数据中设置了我的关系("writerUsers"与用户之间有一对多的关系),但我在AFIS中无法确定在哪里配置它。

我尝试过实现- (NSDictionary *)representationsForRelationshipsFromRepresentation:(NSDictionary *)representation ofEntity:(NSEntityDescription *)entity fromResponse:(NSHTTPURLResponse *)response,但这似乎只有在服务器响应包括实际对象值时才有效——整个用户实体,而不仅仅是ID。

我还看到过使用- (NSURLRequest *)requestWithMethod:(NSString *)method pathForRelationship:(NSRelationshipDescription *)relationship forObjectWithID:(NSManagedObjectID *)objectID withContext:(NSManagedObjectContext *)context提供URL请求以获取用户对象的例子。。。但该方法从未从我的AFHTTPClient子类中调用过。

那么,当我只有一个ID时,我如何教AFIncrementalStore拉入用户实体呢?

我能够解决我的问题。API应该在json:中使用这种格式

"users": [
    {"id":1},
    {"id":2}
]

即使API没有提供这种格式的数据,您也可以在AFRESTClient的子类中"伪造"它。

- (NSDictionary *)representationsForRelationshipsFromRepresentation:(NSDictionary *)representation
                                                       ofEntity:(NSEntityDescription *)entity
                                                   fromResponse:(NSHTTPURLResponse *)response {
    NSMutableDictionary *mutableRelationshipRepresentations = [[super representationsForRelationshipsFromRepresentation:representation ofEntity:entity fromResponse:response] mutableCopy];
    if ([entity.name isEqualToString:@"writer"]) {
        NSArray *user_ids = [representation objectForKey:@"user_ids"];
        NSMutableArray *users = [[NSMutableArray alloc] init];
        for (NSNumber *id in user_ids) {
            [users addObject:@{@"id":id}];
        }
    }
    [mutableRelationshipRepresentations setObject:users forKey:@"users"];
    return mutableRelationshipRepresentations;
}

当然,您需要将"用户"定义为模型中的多对多关系。当关系对象中只有id时,AFIncrementalStore将自动获取单个关系对象。

相关内容

  • 没有找到相关文章

最新更新