在另一个xib中将对象添加到NSMutableArray

时间:2011-02-21 17:42:58

标签: iphone objective-c

我试图将对象添加到另一个xib中的NSMutableArray。但似乎不起作用。我做错了什么?

谢谢!

-(void) buy {
    CartViewController *carrinho = [[CartViewController alloc] initWithNibName:@"CartViewController" bundle:[NSBundle mainBundle]];
    carrinho.produtoCodigo = [[NSMutableArray alloc]init];
    [carrinho.produtoCodigo addObject:@"aa"];
    [carrinho release];
    NSLog(@"did");
}

4 个答案:

答案 0 :(得分:1)

到目前为止,您的代码看起来很好。确保Interface Builder中的连接和XIB中的文件所有者设置正确。

答案 1 :(得分:0)

好的,好几件事。首先,您不需要传入[NSBundle mainBundle]。如果你想要主捆绑,nil工作正常。第二个问题是,produtoCodigo应该是一个保留的属性,因此你应该传入一个自动释放的NSMutableArray,即[NSMutableArray数组]。

第三,我会问你为什么要这样做。这似乎是一个糟糕的设计。理想情况下,可变数组应该是CartViewController中的内部ivar。然后,您应该在CartViewController上有一个方法来处理该项目。您不应该关心它是如何在内部存储的,只是想要将对象添加到控制器中。

如果你想传入多个对象,你应该有一个方法来获取一个对象数组并将其传入。

现在终于,nibs并不真正拥有数组,类就是这样。因此,你的笔尖不应该是一个问题。因此,问题应该在课堂上。你在哪里检查数组是否正在更新并发现它不是?

答案 2 :(得分:0)

你声明并创建了carrinho作为一个视图控制器,如果你已经合成,那么<​​em>应该分配并初始化carrinho.produtoCodigo。然后再次分配它,这可能是内存泄漏。添加aa后,将其释放。因此,总的来说,你还没有完成任何事情。可变阵列产生,被修改,然后被破坏。

你提到“另一个xib”并且从名称CartController和方法名称“buy”听起来你想要更新一些其他类所持有的购物车。因此,需要修改带有cart(和可变数组)的视图或类。就像你和朋友去购物一样,你把管理推车的工作委托给他。他是代表,只有他才能把东西放进购物车。只是因为你想买东西,你必须先把它给他,这样他就可以把它放在购物车里。现在,你的代码就像你从机架上取下一些东西,然后把它放回机架上。它永远不会进入购物车。

您要做的是创建一个带有消息addToCart的购物协议,这是代码所做的。它会将消息发送给代理人以将项目添加到购物车。另一个xib代码有一个方法 - (void)addToCart:(id)item;这个代码块调用委托时调用的是什么。查找协议和代理;它们很容易创建,也是让多个控制器相互通信的唯一方法。

答案 3 :(得分:0)

也许您在第二个XIB中插入了以下代码:

-(void) viewDidLoad {
    produtoCodigo = [[NSMutableArray alloc] init];
}

因为如果你再次分配一个数组,它中的前一个对象将被删除。