Я использую AFNetworking для получения JSON из URL-адреса, JSON анализируется и должен быть преобразован в формат NSData, который затем, в свою очередь, помещается в массив. Однако, похоже, он не работает. Я думаю, что я веду себя глупо, потому что он работал ранее, но сейчас-Преобразование JSON из AFNetworking
-(void)loadFromServer{
NSString *trendsURL = [NSString stringWithFormat:@"http://myurl.com/data.json"];
NSURL *url = [NSURL URLWithString:trendsURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation
JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json) {
self.results = [json valueForKeyPath:@"data"];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
}];
[operation start];
NSError *anError = nil;
NSArray *parsedElements = [NSJSONSerialization JSONObjectWithData:elementsData
options:NSJSONReadingAllowFragments
error:&anError];
for (NSDictionary *aModuleDict in parsedElements){
MosData *aMosModule = [[MosData alloc] initWithDictionary:aModuleDict];
[elements addObject:aMosModule];
}
}
Данные отображаются в коллекции, как точки зрения отдельно, нет никаких проблем с этим отдельным видом, как это работает, когда я получить доступ к данным из файла а не сервера.
-(void)loadFromDisk{
NSString *pathString = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"json"];
NSData *elementsData = [NSData dataWithContentsOfFile:pathString];
NSError *anError = nil;
NSArray *parsedElements = [NSJSONSerialization JSONObjectWithData:elementsData
options:NSJSONReadingAllowFragments
error:&anError];
for (NSDictionary *aModuleDict in parsedElements){
MosData *aMosModule = [[MosData alloc] initWithDictionary:aModuleDict];
[elements addObject:aMosModule];
}
}
JSON скачиваются это так:
{
"imageLink": "http://link.com/image.jpg",
"size": 1,
"title": "Food"
}
Я дал ему еще идти, и до сих пор она не работает. Результатом является объявленный NSArray.
-(void)loadFromServer{
NSString *trendsURL = [NSString stringWithFormat:@"http://url.com/data.json"];
NSURL *url = [NSURL URLWithString:trendsURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation
JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json) {
NSLog(@"Custom Mosaic: %@", json);
self.results = [json valueForKeyPath:@"data"];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
}];
[operation start];
for (NSDictionary *aModuleDict in self.results){
MosData *aMosModule = [[MosData alloc] initWithDictionary:aModuleDict];
[elements addObject:aMosModule];
}
}
Я думаю, что этот вопрос может быть на самом деле это отыграв вокруг немного, по какой-то причине, он не будет забрать результаты данных проанализированных в работе AFNetworking.
-(id)init{
self = [super init];
if (self){
elements = [[NSMutableArray alloc] init];
[self loadFromServer];
}
return self;
}
// WWDC 2012 proposed method
+ (CustomMosDatasource *)sharedInstance {
static CustomMosDatasource *sharedInstance;
if (sharedInstance == nil)
sharedInstance = [CustomMosDatasource new];
return sharedInstance;
}
#pragma mark - MosViewDatasourceProtocol
-(NSArray *)mosElements{
NSArray *retVal = elements;
return retVal;
}
Результаты в журнале только в формате JSON:
Custom Mosaic: {
data = (
{
imageFilename = "http://distilleryimage6.instagram.com/9969123a6af311e2b6c722000a9d0edd_7.jpg";
size = 1;
title = "Title";
},
1) Что не работает? Сообщения об ошибках? Ожидаемые и фактические результаты? - 2) Откуда берется 'elementData'? Он не установлен или не инициализирован в вашем коде. - 3) AFJSONRequestOperation работает ** асинхронно ** !! –
Извините, я добавил немного больше деталей, проблема, которая возникает, в виде коллекции ничего не отображается. Это некоторая форма ошибки синтаксического анализа, но я не могу понять, что. –
Каков ваш фактический код? мне кажется, что вам не хватает асинхронного подхода к запросам. Попробуйте выполнить оператор '' for'' при обратном вызове. – amb