在For循环的每次迭代中创建一个新数组

时间:2014-01-16 09:10:47

标签: ios arrays for-loop ios7

经过这么长时间,我仍然在尝试创建我的第一个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。我的回复可能很慢,所以请原谅我

3 个答案:

答案 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"];
            }
        }

希望这会对你有所帮助。