0

我正在尝试做一个程序,其中有一个product我希望被移动到storehouse.

例子:

将 25 箱苹果从库存(手头)移至仓库。

当我将产品添加到仓库listOfProducts然后将库存归零时,由于某种原因,仓库的产品也会受到影响,即使它不应该受到影响。

该过程应该是;

  1. 找到您要入库的产品对象
  2. 更新仓库数量,确保数量是添加您手头的库存
  3. 将产品对象添加到仓库的 listOfProducts
  4. 使库存库存为零 (0)

但它也使仓库数量为0?为什么?它似乎没有理由这样做。

它似乎在我引用的对象之间强制建立了符号链接,即使这不是要发生的事情。

我需要先制作对象的副本吗?

一些笔记。

一个。仓库是一个对象,每个城市都有一个仓库(即city.listOfStorehouses)。

湾。city.listOfStorehouses 保存在单例中,因此保存状态或在页面之间传递状态不是问题。

C。物品被添加到仓库,但数量重置为零?但为什么?

// Try to move X goods from inventory -> storehouse
 NSLog(@"Goods to move = %@, %d crates", self.product.name, self.crates);

// I add the qty to the product I want to put into the storehouse        
self.product.qty += self.crates;

// Append the array (I should check if the product already exists but this does not matter right now)
[self.storehouse.listOfProducts addObject:self.product];

// Reset crates because it should always be zero because you've moved them
// from your inventory into a storehouse
self.crates = 0;

好的,所以当我在库存页面上将 25 个苹果从库存转移到仓库时,参考和数量似乎都很好。

但是,如果我刷新/重新加载页面,即使仓库中有物品,数量也会在仓库中重置为零。

我不知道是什么导致仓库项目数量设置为零。

这是一个日志输出;

// Log output

// Stock page
// Goods to move = Apples, 25 crates, seems to be storing fine, no problem.
2013-02-16 09:40:27.257 TestApp[1524:c07] Storehouse = (25/500)
2013-02-16 09:40:27.260 TestApp[1524:c07]    #0 storehouse item = Apples with 25 crates

// Previous page
// When I go back to the previous page, the qty is zero?? WHY?
2013-02-16 09:41:33.980 TestApp[1524:c07] Storehouse = (0/500)
2013-02-16 09:41:33.980 TestApp[1524:c07]    #0 storehouse item = Apple with 0 crates
4

1 回答 1

1

当您将对象分配给变量时,它是对分配给变量的原始对象的引用。这可能就是您所说的“符号链接”。

在 Objective-C 中,变量赋值不会自动创建新对象,但是您可以将属性声明为“复制”属性,在这种情况下,该对象将被属性的自动生成的 setter 方法复制。

您需要确保您的对象实现了NSCopying协议此处还讨论了如何为自定义对象实现该协议。

于 2013-02-16T11:59:26.347 回答