Я пытаюсь отобразить результат API, имеющий динамические вложенные атрибуты. Результат (JSON), у меня есть это:Атрибуты динамического вложения RestKit
{
"url": "https://api.github.com/gists/8901308",
"id": "8901308",
"html_url": "https://gist.github.com/8901308",
"files": {
"node-and-npm-in-30-seconds.sh": {
"filename": "node-and-npm-in-30-seconds.sh",
"type": "application/sh",
"language": "Shell",
"raw_url": "https://gist.github.com/braincrash/8901308/raw/bae861f7c4ab0c1ffd9962439e770b02f52c5dd7/node-and-npm-in-30-seconds.sh",
"size": 352
},
"only-git-all-the-way.sh": {
"filename": "only-git-all-the-way.sh",
"type": "application/sh",
"language": "Shell",
"raw_url": "https://gist.github.com/braincrash/8901308/raw/eba9667b37218ffb41892411c94abd051b0e269a/only-git-all-the-way.sh",
"size": 440
}
}
}
я могу получить все атрибуты, но файлы не будут работать. Вот мое отображение:
RKEntityMapping *fileMapping = [RKEntityMapping mappingForEntityForName:@"File" inManagedObjectStore:managedObjectStore];
fileMapping.forceCollectionMapping = YES;
[fileMapping addAttributeMappingFromKeyOfRepresentationToAttribute:@"filename"];
[fileMapping addAttributeMappingsFromDictionary:@{@"(filename).raw_url": @"rawURL",
@"(filename).size": @"size"}];
RKEntityMapping *gistMapping = [RKEntityMapping mappingForEntityForName:@"Gist" inManagedObjectStore:managedObjectStore];
[gistMapping addAttributeMappingsFromDictionary:@{
@"id": @"gistID",
@"url": @"jsonURL",
@"html_url": @"htmlURL"}];
gistMapping.identificationAttributes = @[ @"gistID" ];
[gistMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"files" toKeyPath:@"files" withMapping:fileMapping]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:gistMapping method:RKRequestMethodGET pathPattern:@"/gists/public" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
Когда я смотрю на файле внутри суть объекта, я получаю только имя файла, но не URL, ни размера:
filename = "radiation.js";
gist = "0xb9742f0 <x-coredata://D37E442D-45BA-4A0E-B7A5-A349F75FA362/Gist/p21>";
rawURL = nil;
size = 0;
Спасибо за помощь !!
Возможно, потому что ваши имена файлов содержат точки, поэтому они будут испортить навигацию по ключевым путям. Включите ведение журнала трассировки для проверки. У вас есть возможность изменить JSON? – Wain
Вы правы. Я нашел ключ без точек и отлично работал. Yo может добавить ответ с этим, и я буду отмечать его как правильное. Знаете ли вы какое-либо обходное решение этой проблемы? благодаря – amcastror