我正在尝试做天气应用
#import "LocationTableViewController.h"
@interface LocationTableViewController (){
NSArray *hourlyData;
NSArray *dailyData;
}
@end
@implementation LocationTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSString *str = @"https://api.forecast.io/forecast/cd8edc928426f2ac3e341441c7a9c6d3/37.8267,-122.423";
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]];
NSDictionary *dataFromWeb = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
我接受了一个json查询,该查询提供每小时和每日数据,然后将其转换为字典。在这里,我创建了两个字典,即每小时字典和日常字典,其中包含温度,湿度等字段
我的主要目标是通过将它们加载到表格视图中,每小时和每天使用这两个词典来创建天气应用程序。
NSDictionary *hourlyDict = [dataFromWeb objectForKey:@"hourly"];
hourlyData = [hourlyDict objectForKey:@"data"];
NSDictionary *dailyDict = [dataFromWeb objectForKey:@"daily"];
dailyData = [dailyDict objectForKey:@"data"];
NSLog(@"%@", [[dailyData objectAtIndex:0] objectForKey:@"humidity"]);
}
在这里,我成功创建了两个字典,并尝试使用NSlog来正常工作。
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
我觉得我的问题从将字典加载到tableView中开始。
1)在故事板中,我将表视图嵌入到NavigationView中。 2)我将表格查看内容作为动态协议 3)将单元标识符命名为单元格
我认为问题始于将数据发送到表中。基本上我的应用程序应包含3个部分摘要,每小时数据和每日数据。但我只是想现在只尝试每日数据。
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
由于我不想要任何部分,我删除了这个号码。部分,但它告诉我错误,所以保持它返回并返回0.,我也尝试使它1,但应用程序崩溃。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"hello");
return dailyData.count;
}
这里我希望列作为字典中的no.of行,所以我创建了dailyData.count。
这里开始主要问题,这个 - (UITableViewCell *)tableView:........函数没有被调用,我试过NSlog一条消息,它没有显示出来
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
NSLog(@"hello");
cell.textLabel.text = [[dailyData objectAtIndex:indexPath.row]objectForKey:@"sunsetTime"];
return cell;
}
请问有人可以帮助我。提前致谢。我是编程新手。
答案 0 :(得分:1)
//部分应为1而不是0
CStr (CurrentFieldValue, "#,##,##,##,##,###.00")
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
具有以下无法指定为单元格标签文本的字典,您必须为单元格标签文本指定一些字符串值
[dailyData objectAtIndex:indexPath.row]
{
apparentTemperatureMax = "60.49";
apparentTemperatureMaxTime = 1462316400;
apparentTemperatureMin = "52.96";
apparentTemperatureMinTime = 1462276800;
cloudCover = "0.92";
dewPoint = "50.37";
humidity = "0.8100000000000001";
icon = "partly-cloudy-day";
moonPhase = "0.89";
ozone = "351.23";
precipIntensity = 0;
precipIntensityMax = 0;
precipProbability = 0;
pressure = "1014.68";
summary = "Mostly cloudy throughout the day.";
sunriseTime = 1462281126;
sunsetTime = 1462331002;
temperatureMax = "60.49";
temperatureMaxTime = 1462316400;
temperatureMin = "52.96";
temperatureMinTime = 1462276800;
time = 1462258800;
visibility = "8.779999999999999";
windBearing = 275;
windSpeed = "5.83";
}
您正在为tableViewCell标签分配字典。如果你想要特定的键值,那么检查下面的代码
cell.textLabel.text = [dailyData objectAtIndex:indexPath.row];
答案 1 :(得分:0)
要解决您的问题,您需要将部分数量设置为1(您必须始终至少有1个部分才能显示任何内容)。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
当您将节数设置为1时,您遇到崩溃的原因是因为您尝试将NSDictionary用作NSString。您需要从NSDictionary获取NSString。以下代码将从该行的每日数据中获取摘要并显示摘要。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
NSDictionary *rowData = [dailyData objectAtIndex:indexPath.row];
cell.textLabel.text = [rowData objectForKey:@"summary"];
return cell;
}
答案 2 :(得分:0)
我试图将浮动传递到我的表格单元格文本中,这是错误的。我们必须只将文本传递给那个,但我试图插入浮点值。现在我传递一些文本值,它工作正常
谢谢大家的支持。再次感谢你
答案 3 :(得分:0)
使用下面的代码,你的代码对我有用,
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"hello");
return dailyData.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
NSLog(@"hello %@",[[dailyData objectAtIndex:indexPath.row] objectForKey:@"humidity"]);
cell.textLabel.text = [NSString stringWithFormat:@"%@",[[dailyData objectAtIndex:indexPath.row] objectForKey:@"humidity"]];
return cell;
}
您的输出如下,
打印湿度值
希望它有用
答案 4 :(得分:-2)
您必须显示不要显示数据,因为您的dailyData
是NSArray!
如何使用数组作为字符串?建议您使用模型来存储数据。< / p>
NSDictionary *hourlyDict = [dataFromWeb objectForKey:@"hourly"];
hourlyData = [hourlyDict objectForKey:@"data"];
NSDictionary *dailyDict = [dataFromWeb objectForKey:@"daily"];
dailyData = [dailyDict objectForKey:@"data"];
for (id obj in hourlyData) {
newsModel *model=[[newsModel alloc]init ];
model.name=obj[@"summary"];
[_dataArray addObject:model];
}
NSLog(@"%@", [[dailyData objectAtIndex:0] objectForKey:@"humidity"]);
在表格视图中委托:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIde=@"cell";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIde];
if (!cell) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIde ];
}
newsModel *model=_dataArray[indexPath.row];
cell.textLabel.text=model.name;
return cell;
}