我正在使用RestKit将数据从我的api映射到CoreData实体,但是当我想以非标准的方式使用这个库时遇到了一些困难。例如RestKit additional data in response
中描述的所以我决定使用AFNetworking + MagicalRecord为自己做一些工作。我喜欢RestKit对象映射,所以我想使用它。
[afhttpRSClient getPath:@"_api/items"
parameters:parameters
success:^(AFHTTPRequestOperation *operation, id responseObject) {
if ([responseObject isKindOfClass:[NSDictionary class]]) {
id items = responseObject[@"items"];
if (items && [items isKindOfClass:[NSArray class]]) {
NSManagedObjectContext *context = [NSManagedObjectContext MR_contextForCurrentThread];
for (NSDictionary *item in items) {
SomeEntity *entity = [SomeEntity MR_findFirstByAttribute:@"entityId" withValue:item[@"id"] inContext:context];
if (!entity) {
entity = [SomeEntity MR_createInContext:context];
}
RKMappingOperation *mappingOperation;
mappingOperation = [[RKMappingOperation alloc] initWithSourceObject:item
destinationObject:entity
mapping:[SomeEntity entityMapping]];
NSError *mappingError = nil;
BOOL mappingSuccess = [mappingOperation performMapping:&mappingError];
}
}
}
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error: %@", error);
}];
但是我想知道有没有正确的方法来使用RestKit的部分来自动将我的items
NSArray直接绑定到CoreData?我认为它已经实现了此代码的更常见部分,我想使用它。有可能吗?
答案 0 :(得分:2)
您可以使用RKMappingOperation
执行所需操作,主要是您缺少所需的dataSource
(请参阅RKManagedObjectMappingOperationDataSource
)。通常,您不会提供目标实体,您可以允许dataSource
创建它(基于映射实体类型)。
通常情况下,当您不需要映射时,使用RestKit处理要执行映射和使用AFN的请求通常会更好。其他问题的答案告诉您如何提取“额外”信息。