我有一个从json请求收到的NSDictionary,如下所示:
RESULT : (
{
Id1 = 138;
lat = "45.5292910";
long = "-73.6241500";
order = "2343YY3"
},
{
Id1 = 137;
lat = "45.5292910";
long = "-73.6241500";
order = "2343YY3"
}, etc.
我想在TableView(CellforRowAtIndexPath)中显示它,因此我将数据作为NSArray获取。该方法似乎效率低下,因为每个键Id1
,lat
,long
等都是作为NSArray创建的,因此我可以使用以下各项显示它们:[self.data1 objectAtIndex:indexPath.row];
[self.data2 objectAtIndex:indexPath.row]
等等。
如果不创建和使用4个NSArrays,我怎样才能实现同样的目标?我可以使用单个NSArray或存储数据的NSMutableDictionary吗?
更新:
当TableView加载时,它最初是空的,但我在同一个VC上有一个按钮,用于加载表单的模态视图。当我加载表单然后关闭它返回到TableView时,数据被加载!你能说出我错过的东西吗?
答案 0 :(得分:3)
是的,您可以使用单个阵列。诀窍是创建一个数组,每个数组条目都包含一个字典。然后查询数组以填充表视图。
例如:如果您的数组是一个名为tableData
的属性,并且您有一个名为CustomCell
的自定义tableview单元格,那么您的代码可能如下所示:
- (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.tableData count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CustomCell";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell...
cell.latitude.text = [[self.tableData objectAtIndex:indexPath.row] objectForKey: @"lat"];
cell.longitude.text = [[self.tableData objectAtIndex:indexPath.row] objectForKey:@"long"];
// continue configuration etc..
return cell;
}
同样,如果在tableview中有多个部分,那么您将构造一个数组数组,每个子数组包含该部分的字典。填充tableview的代码类似于以下内容:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return [self.tableData count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return [[self.tableData objectAtIndex:section] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CustomCell";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell...
cell.latitude.text = [[[self.tableData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] objectForKey: @"lat"];
cell.longitude.text = [[[self.tableData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] objectForKey:@"long"];
// continue configuration etc..
return cell;
}
TL; DR;从您的JSON数据中创建您的词典并将它们放在一个数组中。然后查询数组以填充tableview。
答案 1 :(得分:0)
您可以执行以下操作:
// main_data = Store your JSON array as "array of dictionaries"
然后在cellForRowAtIndexPath
中执行以下操作:
NSDictionary *obj = [main_data objectAtIndex: indexPath.row];
// Access values as follows:
[obj objectForKey: @"Id1"]
[obj objectForKey: @"lat"]
...
...