2015-06-29 4 views
0

В моем приложении я получаю данные JSON. Иногда приложение не может его получить, и когда я печатаю объект responseObject, он возвращает(). Я хотел бы сделать оператор if, чтобы, когда это произойдет, появится UIAlertView. Прямо сейчас, у меня есть утверждение if, говорящее, что если self.jobs == nil, появится предупреждение, но это не работает. Я бы очень признателен за любую помощь!Получение данных JSON после неудачного извлечения

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

    //Fetch JSON 
    NSString *urlAsString = [NSString stringWithFormat:@"https://jobs.github.com/positions.json?description=%@&location=%@", LANGUAGE, TOWN]; 
    NSURL *url = [NSURL URLWithString:urlAsString]; 
    NSURLRequest *request = [NSURLRequest requestWithURL: url]; 
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
    operation.responseSerializer = [AFJSONResponseSerializer serializer]; 

    //Parse JSON 
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) 
    { 
     self.jobs = (NSArray *)responseObject; 

     if(self.jobs != nil) 
     { 
      [self.tableView reloadData]; 
     } 
     else 
     { 
      UIAlertView* alert_view = [[UIAlertView alloc] 
             initWithTitle: @"Failed to retrieve data" message: nil delegate: self 
             cancelButtonTitle: @"cancel" otherButtonTitles: @"Retry", nil]; 
      [alert_view show]; 
     } 
    } 

    //Upon failure 
            failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    { 
     UIAlertView *aV = [[UIAlertView alloc] 
          initWithTitle:@"Error" message:[error localizedDescription] delegate: nil 
          cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 
     [aV show]; 
    }]; 
+0

Также следует обратить внимание на код статуса HTTP '[operation.response StatusCode ] ', вы даже можете получить код состояния сервера. – zaph

+1

В будущем не отправляйте свой вопрос во второй раз. Вместо того, чтобы публиковать этот вопрос, вы должны обновить свой предыдущий вопрос, чтобы прояснить ситуацию. – rmaddy

ответ

2

Похоже, что вы возвращаете пустой ответ, так что нулевая проверка всегда разрешает true. Попробуйте проверить, если подсчет NSArray больше, чем 0 вместо if(self.jobs != nil)

Просто измените if(self.jobs != nil) на if([self.jobs count] > 0).

if([self.jobs count] > 0) 
{ 
    [self.tableView reloadData]; 
} 
else 
{ 
    UIAlertView* alert_view = [[UIAlertView alloc] 
           initWithTitle: @"Failed to retrieve data" message: nil delegate: self 
           cancelButtonTitle: @"cancel" otherButtonTitles: @"Retry", nil]; 
    [alert_view show]; 
} 

Вы также можете сделать проверку нулевой, прежде чем попытаться сделать подсчет, чтобы избежать каких-либо нулевой ссылки исключения:

if(self.jobs != nil && [self.jobs count] > 0) 
+1

Обновлен ответ – pnavk

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