gpt4 book ai didi

iphone - 分段表转 JSON

转载 作者:行者123 更新时间:2023-12-01 18:01:28 26 4
gpt4 key购买 nike

几天来,我一直在尝试弄清楚如何将此 JSON 解析为分段的 UITable,但我没有成功,我只能弄清楚如何获取部分名称,但无法获取每个部分的行数和数据对于每个部分中的每一行。

由于运输组可能会不时变化并且他们的名称可能会改变,所以我想我需要使用 allKeys 找出每个部分的标题 1st。

请帮助并指出正确的方向来提取分段 UITable 的数据,谢谢。

{
"transport" : {
"public" : [
{
"transport_id" : "2",
"transport_name" : "Ferry"
},
{
"transport_id" : "3",
"transport_name" : "Bus"
},
{
"transport_id" : "4",
"transport_name" : "Taxi"
},
{
"transport_id" : "5",
"transport_name" : "Tram"
}
],
"Private" : [
{
"transport_id" : "11",
"transport_name" : "Bicycle"
},
{
"transport_id" : "12",
"transport_name" : "Private Car"
}
],
"Misc" : [
{
"transport_id" : "6",
"transport_name" : "By Foot"
},
{
"transport_id" : "7",
"transport_name" : "Helicopter"
},
{
"transport_id" : "8",
"transport_name" : "Yatch"
}
]
}
}



NSDictionary *results = [jsonString JSONValue];

NSDictionary *all = [results objectForKey:@"transport"];
NSArray *allKeys = [all allKeys];

NSArray *transports = [results objectForKey:@"transport"];
for (NSDictionary *transport in transports)
{
[transportSectionTitle addObject:(transport)];
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [transportSectionTitle count];
}

最佳答案

最容易解释的解决方案是使用 all字典作为您的数据源。

NSDictionary *results = [jsonString JSONValue];

NSDictionary *all = [results objectForKey:@"transport"];

// self.datasource would be a NSDictionary retained property
self.datasource = all;

然后得到你可以做的部分的数量:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [self.datasource count]; // You can use count on a NSDictionary
}

要获取部分的标题:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

NSString *title = [[self.datasource allKeys] objectAtIndex:section];

return title;
}

要获取每个部分中的行数:
- (NSInteger)tableView:(UITableView *)favTableView numberOfRowsInSection:(NSInteger)section {

// Get the all the transports
NSArray *allTransports = [self.datasource allValues];

// Get the array of transports for the wanted section
NSArray *sectionTransports = [allTransports objectAtIndex:section];

return [sectionTransports count];
}

然后获取行:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Get the all the transports
NSArray *allTransports = [self.datasource allValues];

// Get the array of transports for the wanted section
NSArray *sectionTransports = [allTransports objectAtIndex:indexPath.section];

// Then get the transport for the row
NSDictionary *transport = [sectionTransports objectAtIndex:indexPath.row];

// Now you can get the name and id of the transport
NSString *tansportName = [transport objectForKey:@"transport_name"];
NSString *transportId = [transport objectForKey:@"transport_id"];

NSString *transportDescription = [NSString stringWithFormat:@"%@ - %@",transportId, transportName];

cell.textLabel.text = transportDescription;

return cell;
}

无论如何,这就是它的要点。

您可能想要存储 allKeysallValues数组作为类属性,而不必在所有 tableview 的委托(delegate)和数据源方法中遍历它们,但是您现在应该拥有构建 yuor 表的所有信息。

希望这可以帮助 :)

关于iphone - 分段表转 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9030530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com