Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将对象添加到另一个xib中的NSMutableArray_Iphone_Objective C - Fatal编程技术网

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

Iphone 将对象添加到另一个xib中的NSMutableArray,iphone,objective-c,Iphone,Objective C,我正在尝试向另一个xib中的NSMutableArray添加对象。但似乎不起作用。我做错了什么 谢谢 -(void) buy { CartViewController *carrinho = [[CartViewController alloc] initWithNibName:@"CartViewController" bundle:[NSBundle mainBundle]]; carrinho.produtoCodigo = [[NSMutableArray alloc]i

我正在尝试向另一个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");
}

到目前为止,您的代码看起来还不错。确保InterfaceBuilder中的连接和XIB中的文件所有者设置正确。

好的,有几件事。首先,您不需要传入[NSBundle mainBundle]。如果需要主捆绑包,nil可以正常工作。第二个问题是,produtoCodigo应该是一个要保留的属性集,因此您应该传入一个自动删除的NSMutableArray,即[NSMutableArray]

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

如果要传入多个对象,应该有一个方法,该方法接受一个对象数组并传入该数组


最后,NIB并不是真的包含数组,而是类。因此,您的nib不应该有问题。因此,问题应该与班级有关。您在哪里检查数组是否正在更新并发现它没有更新?

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

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


您要做的是创建一个购物协议,其中包含一条消息addToCart,而这正是此代码所要做的。它将向代理发送消息以将项目添加到购物车。另一个xib代码有一个方法-(void)addToCart:(id)item;这就是当此代码块调用委托时调用的内容。查阅协议和委托书;它们创建起来很简单,也是让多个控制器彼此对话的唯一方法。

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

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

因为如果您再次分配数组,其中以前的对象将被删除。

所有连接都正常。我不知道发生了什么事。我想把它用在购物车上。我在这里问过,在NSMUtableArray上,将信息传递给购物车的最佳方法是什么。事实是,在每个XIB上共享NSMUtableArray是可能的?我的意思是,无论活动的xib是什么,它们都链接到同一个数组。视图(XIB)本身只保存UI控件,如按钮、字段和表。因此,您必须通过向视图控制器发送消息来协调所有要对该数组执行操作的视图。控制器控制阵列。