2012-07-19 5 views
1

나는 segues를 이해하는 데 어려움을 겪고 있으며, 어떻게 동작하고 객체를 전달 하는가. 기본적으로 저는 계산기가 있고 배열에 저장된 객체를 그래프로 표시하려고합니다. 지금까지 나는 CalculatorBrain의 인스턴스 인 brain이라는 객체를 가지고 있습니다. 이제 두뇌 변수를 저장하는 스택으로 사용 NSArray 속성이 있습니다. 배열에 3과 5 값을 더하고 segue를 원한다고 가정 해 봅시다. 나는 "Graph"버튼을 선택했을 때 버튼을 클릭 할 때 segue를 선택한다. 내가 바라는 새로운 뷰 컨트롤러에 어떻게 두뇌를 전달할 것인가? 전달 된 객체를 받아 들여야하는 새 뷰 컨트롤러에 정의 된 setGraphingPoint라는 속성이 있습니다. 또한, 만약 내가 두뇌를 통과하면 세그 가치 3과 5가 함께 전달 될 것인가 아니면 CalculatorBrain의 새로운 객체를 생성 할 것인가? 여기까지 내가 지금까지 가지고있는 것이있다.Segue를 사용하여 객체 전달하기

이것은 버튼을

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

if([segue.identifier isEqualToString:@"Graph"]) 
    [segue.destinationViewController setGraphingPoint:[self.brain program]]; 
+0

뭐가 잘못이야? 작동하지 않는 것에 대해 더 구체적으로 설명 할 수 있습니까? – Nosrettap

+0

필자는 단지 전달하고 오브젝트를 처리하는 방법을 정확히 이해하지 못했고 정확하게 전달되는 것은 무엇입니까 –

+1

이 예제에서는 포인터를 오브젝트'property'에 전달하고 있습니다. 이는 전달 된 원본 객체에 대한 참조이며 사본이 아니라는 것을 의미합니다. 개를 가리 키기 위해 손가락을 사용하고 있었다고 상상해보십시오. 갑자기 너는 내 옆에 걸어 다닌다. 손가락을 사용하여 개를 가리 키도록 말할 수 있습니다. 우리는 둘 다 똑같은 객체를 참조하고 있습니다. (그러나 개가 실제로 움직이지 않는다는 것에 유의하십시오.) – Nosrettap

답변

2

당신은 프로토콜을 사용할 수를 SEGUE이는 것 이전 뷰 컨트롤러에서 호출

@property (nonatomic, strong) CalculatorBrain *graphingPoint; 
@synthesize graphingPoint = _graphingPoint; 

-(void) setGraphingPoint:(CalculatorBrain*) graphingPoint{ 

_graphingPoint = graphingPoint; 
[self.graphingView setNeedsDisplay]; 

} 

새로운 뷰 컨트롤러에 정의되어 있습니다. 예를 들어, 당신은 당신의 prepareForSegue은 다음과 같이 할 수 있습니다 :

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    id destination = segue.destinationViewController; 
    if([destination conformsToProtocol:@protocol(GraphPointUsing)]) 
     [destination setGraphingPoint:[self.brain program]]; 
} 

그런 다음 당신은 당신이 GraphPointUsing에 순응하는 segueing되어 상기의 ViewController 확인해야합니다. 당신이 프로토콜을 사용하지 않는다, 그러나 당신은 여전히 ​​당신이 할 수있는 GraphPoint의 메소드를 호출 할 경우

:

//In new ViewController suppose we want to call the method `foo` on `GraphPoint` 
[self.graphingPoint foo]; 

//Or if we want to call a setter we can do 
[self.graphingPoint setFoo:5]; 
+0

나는 프로토콜을 사용할 것을 요구할 것이다. 내게 훨씬 명확한 도움을 주셔서 감사합니다. –

+0

위의 화살표와이 체크 표시의 왼쪽에있는 큰 체크 표시를 클릭하면 도움이 될 것입니다. :) – Nosrettap

관련 문제