迭代后数组设置为nil

时间:2015-05-20 20:13:36

标签: ios objective-c

我遇到一个问题,即迭代后属性变为nil

NSMutableArray * lojas = [[NSMutableArray alloc] init];    
for (int x = 0; x < lojaResultado.count; x++) {

            NSDictionary * listaAtributos = [lojaResultado objectAtIndex: x];
            Loja * loja = [[Loja alloc] init];
            NSMutableArray * produtosLista = [[NSMutableArray alloc] init];
            [loja     setName: [listAtributos objectForKey: @"Loja"]];
            NSArray * produtosResultado  = [[NSArray alloc] initWithArray: [listaAtributos objectForKey: @"Produtos"]];

            for(int y = 0; y < produtosResultado.count; y++){
                NSDictionary * produtoAtributos = [produtosResultado objectAtIndex:y];
                Produto * produto = [[Produto alloc] init];
                [produto                               setNome: [produtoAtributos objectForKey:@"Nome"]];
                getNumber =    [produtoAtributos objectForKey: @"Tipo"];
                [produto                            setTipo: [getNumber intValue]];
                getNumber =    [produtoAtributos objectForKey: @"Tamanho"];
                [produto                          setTamanho: [getNumber intValue]];
                [produtosLista addObject: produto];
            }

            loja.produtos = produtosLista;
            [lojas addObject: loja];
    }

在迭代期间,我可以在调试模式下看到我的objetc loja在方法setName和正确的列表(loja.produtos = produtosLista)上收到正确的名称。 将对象loja添加到我的数组lojas后,我可以看到正确的对象,但是当第二次迭代开始时,第一个数组位置的对象设置了其属性produtos(数组)到nil。 以前有人遇到过这个问题吗?或者有人可以说我做错了什么?

Loja .h档案:

@property (nonatomic) NSString * name;
@property (strong, nonatomic) NSMutableArray * produtos;

1 个答案:

答案 0 :(得分:1)

我在你的代码中看到[produtosLista addObject: tires];但是在方法块中没有创建轮胎,它似乎在第二次迭代tires中被刷新了。

作为您的实现,您似乎想要添加产品,可以尝试使用此代码。

<强>更新

我使用快速枚举更新了代码段,并删除了alloc/init以进行数组分配并使用了自动释放概念。

NSMutableArray * lojas = [[NSMutableArray alloc] init];
for (NSDictionary *listaAtributos in lojaResultado) {
    Loja * loja = [[Loja alloc] init];
    [loja setName:[listAtributos objectForKey: @"Loja"]];

    NSMutableArray * produtosLista = [NSMutableArray array];
    for(NSDictionary * produtoAtributos in [listaAtributos objectForKey: @"Produtos"]){
        Produto * produto = [[Produto alloc] init];
        [produto setNome:[produtoAtributos objectForKey:@"Nome"]];
        [produto setTipo:[[produtoAtributos objectForKey: @"Tipo"] intValue]];
        [produto setTamanho:[[produtoAtributos objectForKey:@"Tamanho"] intValue]];
        [produtosLista addObject:produto];
    }

    [loja setProdutos:produtosLista];
    [lojas addObject: loja];
}