检索失败后正在提取 JSON 数据
Fetching JSON data after failed retrieval
在我的应用程序中,我正在获取 JSON 数据。有时,应用程序无法获取它,当我打印 responseObject 时,它 returns ( )。我想做一个 if 语句,这样当这种情况发生时,一个 UIAlertView 就会出现。现在,我有一个 if 语句说如果 self.jobs == nil,警报就会出现,但那是行不通的。如果有任何帮助,我将不胜感激!
- (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];
}];
听起来您返回的是空响应,因此空检查始终解析为真。尝试检查 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)
在我的应用程序中,我正在获取 JSON 数据。有时,应用程序无法获取它,当我打印 responseObject 时,它 returns ( )。我想做一个 if 语句,这样当这种情况发生时,一个 UIAlertView 就会出现。现在,我有一个 if 语句说如果 self.jobs == nil,警报就会出现,但那是行不通的。如果有任何帮助,我将不胜感激!
- (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];
}];
听起来您返回的是空响应,因此空检查始终解析为真。尝试检查 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)