2013-02-16 4 views
0

storehouse으로 옮기기를 원하는 product이있는 곳에서 프로그램을 만들려고합니다.목표 C - 배열의 수량은 항상 0으로 재설정되지만 그 이유는 무엇입니까?

예 : 창고에

이동 (손) 인벤토리 사과 25 개 상자.

나는 창고의 listOfProducts에 제품을 추가 한 다음이 안된다하더라도, 창고의 제품도 영향을 어떤 이유로 주식을 제로합니다.

프로세스는 다음과 같아야합니다.

  1. 은 수량이 창고의 listOfProducts에 제품 객체를 추가 손
  2. 에있는 주식을 추가 확인하고, 당신은 창고
  3. 업데이트 창고의 수량으로 이동하려는 제품의 개체를 찾기
  4. 인벤토리 주식을 0으로 만드십시오.

그러나 창고 수량도 0입니까? 왜? 왜 그렇게해야하는지에 대한 이유가없는 것처럼 보입니다.

내가 참조하고있는 개체 사이에 심볼릭 링크가 강제로있는 것처럼 보입니다.

먼저 개체의 복사본을 만들어야합니까?

일부 메모.

. 창고는 대상이며 각 도시마다 창고가 있습니다 (예 : city.listOfStorehouses).

b. city.listOfStorehouses는 싱글 톤으로 유지되므로 상태를 저장하거나 페이지간에 전달하는 것은 문제가되지 않습니다.

c. 항목이 창고에 추가되지만 수량이 0으로 재설정됩니까? 하지만 왜?

// 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 개 사과를 이동할 때 참조 및 수량 잘 보인다.

그러나 페이지를 새로 고침/다시로드하면 거기에 항목이 있더라도 저장소가 0으로 재설정됩니다.

나는 창고 항목 qty가 0으로 설정되는 원인을 알지 못합니다.

다음은 로그 출력입니다. 당신이 변수에 객체를 할당 할 때

// 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 

답변

1

, 그것은 변수에 할당 된 원래 객체에 대한 참조입니다. 이것은 아마도 당신이 "symlink"라고 부르는 것입니다.

Objective-C에서 변수를 할당 할 때 자동으로 새 개체를 만들지는 않지만 속성을 "복사"속성으로 선언 할 수 있습니다.이 경우 개체는 속성의 자동 생성 된 Setter 메서드에 의해 복사됩니다.

개체에 NSCopying protocol이 구현되어 있는지 확인해야합니다. 사용자 지정 개체에 대해 해당 프로토콜을 구현하는 방법은 here에서도 논의됩니다.

+0

나는 복사를해야 할 것이다. 나는 전에 그것을 한 적이 없다. 나는 꽤 많은 것들이 있기 때문에 모든 속성을 (코드로 작성하여) 복사하고 싶지 않다. – zardon

+0

당신이 옳다고 생각합니다. nscopy를 사용하여 기본 테스트를 수행했으며, nscopy를 처음 접했을 때만 테스트했지만 수량이 최소한으로 유지되도록했습니다. – zardon

관련 문제