2013-07-31 6 views
1

Я использую 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"; 
     }, 
+3

1) Что не работает? Сообщения об ошибках? Ожидаемые и фактические результаты? - 2) Откуда берется 'elementData'? Он не установлен или не инициализирован в вашем коде. - 3) AFJSONRequestOperation работает ** асинхронно ** !! –

+0

Извините, я добавил немного больше деталей, проблема, которая возникает, в виде коллекции ничего не отображается. Это некоторая форма ошибки синтаксического анализа, но я не могу понять, что. –

+0

Каков ваш фактический код? мне кажется, что вам не хватает асинхронного подхода к запросам. Попробуйте выполнить оператор '' for'' при обратном вызове. – amb

ответ

0
AFJSONRequestOperation *operation = [AFJSONRequestOperation 
             JSONRequestOperationWithRequest:request 
             success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json) { 
              self.results = [json valueForKeyPath:@"data"]; 
              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]; 
    } 
             } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
             }]; 

    [operation start]; 
+0

Спасибо за ответ, но это тоже не работает, я дал ему еще одну попытку, добавленную выше. Но он действительно не хочет работать. –

0

Ваш JSON, кажется, не имеют ключевого ресурса "данные", удалите valueForKeyPath: @ "данные", пожалуйста, вставьте результат «NSLog (@« Пользовательская мозаика:% @ », json)» в вашем вопросе. Операция асинхронизирована. Блок успеха вызывается после того, как запрос возвращает данные. Пожалуйста, введите код в блок успеха, подобный этому

-(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); 
              // your json doesn't have keyPath "data" 
              self.results = json; 
              // Codes moved into success block 
              for (NSDictionary *aModuleDict in self.results){ 
               MosData *aMosModule = [[MosData alloc] initWithDictionary:aModuleDict]; 
               [elements addObject:aMosModule]; 
              } 

             } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
             }]; 

    [operation start]; 
} 
+0

Спасибо за код, но это тоже не работает, JSON извлекается и анализируется правильно в соответствии с AFNetorking, это вопрос для раздела (NSDictionary ...). –

+0

Что является результатом NSLog (@ «Пользовательская мозаика:% @», json) – situee

+0

Я добавил ее к самому вопросу. –

Смежные вопросы