经过这么长时间,我仍然在尝试创建我的第一个iOS应用程序,而我又面临另一个问题=(
基本上,我已从网上提取JSON数据,并获得嵌套数组。迭代数组中的所有对象(包括父数组)并将它们放在UITableView
中没有问题。问题是,我正在尝试为表做一些动态的事情。我能够为表创建正确数量的部分。为了便于您可视化我想要做的事情,这里是JSON数据:
{"filter_group":[{"filter_group_id":"1","name":"Location","filter":[{"filter_id":"2","name":"Central"},{"filter_id":"8","name":"East"},{"filter_id":"1","name":"North"},{"filter_id":"10","name":"Northeast"},{"filter_id":"9","name":"West"}]},{"filter_group_id":"3","name":"Price","filter":[{"filter_id":"7","name":"Free"},{"filter_id":"5","name":"$0 - $50"},{"filter_id":"6","name":"$50 - $100"},{"filter_id":"11","name":"$100 - $150"},{"filter_id":"12","name":"$150 - $200"},{"filter_id":"13","name":"Above $200"}]}]}
当你把我给你的混乱块复制到任何JSON查看器中时,你会看到现在,我有2个父阵列,每个都有一些子节点。所以基本上,“位置”和“价格”将分为不同的部分。我已经成功地完成了这项工作,但我不知道如何将他们孩子的名字放在UITableView
的正确部分。
所以现在我的想法是我正在迭代数组,并将子名称放入另一个数组(这导致两个部分的名称都进入1个数组)。我想在每次迭代中创建一个新数组:
for(int i = 0; i < [myArray count]; i++) {
//throw children of different parents into different array
NSMutableArray* newArray[i] = (blah blah blah)
}
您现在可能已经看到了问题:newArray[i]
。基本上,我可以接受这样的事实:我正在创建newArray0,newArray1等(我需要我的应用程序是动态的)。我如何在iOS编程中执行此操作?
或
在阅读了我想要做的事情之后,你对我如何将数据放在各自的部分有不同的想法,请赐教。
非常感谢!!!我非常感谢提供的任何帮助= D
P.S。我的回复可能很慢,所以请原谅我
答案 0 :(得分:1)
在您的应用程序中,您可以使用json对象中的数组。我做了一个示例项目来说明这个aproche:
在头文件(ViewController.h)中:
#import <UIKit/UIKit.h>
@interface ViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) NSMutableArray *data;
@property (nonatomic, strong) NSMutableArray *sectionTitles;
@end
并在ViewController.m文件中:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *jsonString = @"{\"filter_group\":[{\"filter_group_id\":\"1\",\"name\":\"Location\",\"filter\":[{\"filter_id\":\"2\",\"name\":\"Central\"},{\"filter_id\":\"8\",\"name\":\"East\"},{\"filter_id\":\"1\",\"name\":\"North\"},{\"filter_id\":\"10\",\"name\":\"Northeast\"},{\"filter_id\":\"9\",\"name\":\"West\"}]},{\"filter_group_id\":\"3\",\"name\":\"Price\",\"filter\":[{\"filter_id\":\"7\",\"name\":\"Free\"},{\"filter_id\":\"5\",\"name\":\"$0 - $50\"},{\"filter_id\":\"6\",\"name\":\"$50 - $100\"},{\"filter_id\":\"11\",\"name\":\"$100 - $150\"},{\"filter_id\":\"12\",\"name\":\"$150 - $200\"},{\"filter_id\":\"13\",\"name\":\"Above $200\"}]}]}" ;
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
NSArray *filter_groups = [result objectForKey:@"filter_group"];
self.data = [[NSMutableArray alloc] initWithCapacity:[filter_groups count]];
self.sectionTitles = [[NSMutableArray alloc] initWithCapacity:[filter_groups count]];
for (NSDictionary *filter_group in filter_groups) {
NSArray *filters = [filter_group objectForKey:@"filter"];
[self.data addObject:filters];
[self.sectionTitles addObject:[filter_group objectForKey:@"name"]];
}
NSLog(@"%@", self.data);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
return self.sectionTitles[section];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return [self.data count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSArray *sectionArray = self.data[section];
return [sectionArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"testCell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"testCell"];
}
NSArray *sectionArray = self.data[indexPath.section];
NSDictionary *filter = sectionArray[indexPath.row];
cell.textLabel.text = [filter objectForKey:@"name"];
return cell;
}
@end
如果您对代码有相同的问题,请随时提出。您可以从https://gist.github.com/MaciejGad/8452791
获取代码答案 1 :(得分:0)
在每个循环中创建一个新的临时数组并将新的临时数组添加到Mutable数组中,它类似于new array [i],同时检索NSArray * array = [mutablearray objectAtIndex:i]`
答案 2 :(得分:0)
请尝试以下代码。
NSMutableDictionary *responseDict; // assign value to responseDict from your response
NSMutableArray *mainArray=[[NSMutableArray alloc] initWithArray:[responseDict objectForKey:@"filter_group"]];
for(int i=0;i<[mainArray count];i++)
{
if([[[mainArray objectAtIndex:i] objectForKey:@"name"] isEqualToString:@"Price"])
{
NSArray *pricechildArray=[[mainArray objectAtIndex:i] objectForKey:@"filter"];
}
else if([[[mainArray objectAtIndex:i] objectForKey:@"name"] isEqualToString:@"Location"])
{
NSArray *locationchildArray=[[mainArray objectAtIndex:i] objectForKey:@"filter"];
}
}
希望这会对你有所帮助。