JSON을 사용하여 OpenweatherMap에서 데이터를 가져 와서 UITableView에서 인쇄하는 간단한 날씨 응용 프로그램을 만들려고합니다. 그러나 아래 코드를 실행하여 numberOfRowsInSection
메서드에 중단 점을 설정하면 0 행을 반환합니다. 어떻게 든 viewDidLoad
메서드가 numberOfRowsInSection
메서드 뒤에 호출되었으므로 threeHoursForecast 배열이 비어있는 것입니다. 아무도 이걸 좀 도와 줄 수 없어?UITableView 메서드가 ViewDidLoad 전에 호출됩니다.
static NSString * const BaseURLString = @"http://api.openweathermap.org/data/2.5/forecast?q=Houston";
@interface HPViewController()
@end
@implementation HPViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.threeHoursForecast = [[NSMutableArray alloc] init];
self.tableView.dataSource = self;
self.tableView.delegate = self;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:BaseURLString parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSArray *data = [responseObject objectForKey:@"list"];
for (NSDictionary *forecastPerThreeHours in data)
[self.threeHoursForecast addObject:[[forecastPerThreeHours valueForKey:@"main"] valueForKey:@"temp"]];
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [self.threeHoursForecast count];
}
고마워요. 이제 작동합니다. 이전에 데이터를 다시로드하려고 시도했지만 요청 성공 블록 외부에 배치 했으므로 작동하지 않았습니다. – Harry