2012-02-29 4 views
0

해결 방법 - 실제로 문제는 아니라고 생각했습니다.prepareForSegue에서 속성을 설정할 수 없습니다. 보낸 사람 :

prepareForSegue : sender :를 사용하여 뷰잉 컨트롤러에 데이터를 추가하려고하는데 데이터가 속성을 사용하여 설정된 경우 해당 속성이 변경되지 않습니다. 그러나 대상 뷰 컨트롤러의 전용 변수를 사용할 수는 있습니다.이 변수는 그 목적을 위해 작성된 함수를 사용하여 설정됩니다. [flipside annotate:senderAnnotation]보다 flipside.annotate = senderAnnotation를 사용하는

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([[segue identifier] isEqualToString:@"showLocationDetail"]) { 
     CityGuideFlipsideViewController *flipside = [segue destinationViewController]; 
     CityGuideAnnotation *senderAnnotation = (CityGuideAnnotation *)sender; 
     [flipside annotate:senderAnnotation]; // why? 
    } 
} 

그것은하지만, 훨씬 더 자연스러운 것 같습니다 :

여기에 작동하는 코드입니다.

분명히 여기에 분명히 나와있는 것이 틀림 없습니다. 그러나 나는 그것을 발견 할 수 없습니다.

EDIT가 더 명확 경우 실패 얻었다 :

// CityGuideFlipsideViewController.h 
@interface CityGuideFlipsideViewController : UIViewController { 
    CityGuideAnnotation *annotation; 
} 
@property (strong, nonatomic) CityGuideAnnotation *annotation; 

// CityGuideFlipsideViewController.m 
@synthesize annotation; 
- (void)setAnnotation:(CityGuideAnnotation *)_annotation 
{ 
    annotation = _annotation; 
} 

// CityGuideMainViewController.m (in prepareForSegue:sender) 
CityGuideFlipsideViewController *flipside = [segue destinationViewController]; 
CityGuideAnnotation *senderAnnotation = (CityGuideAnnotation *)sender; 
flipside.annotation = senderAnnotation; 

senderAnnotation로 flipside.annotation 할당 라인 달성을 senderAnnotation 값이 정확하다. 과제 이전에 flipside.annotation은 nil입니다. 이 줄 발신자 알림 다음에 flipside.annotation은 변경되지 않습니다.

하지만, CityGuideFlipsideViewController viewDidLoad에 도달했습니다. 디버거에서 여전히 annotation에 대해 nil을 표시하더라도 정확한 값을 낼 수있는 NSLog(@"%@",annotation.title)이 있습니다.

그래서 이전에 디버거에서 annotation CityGuideAnnotation * 0x00000000에 속아왔다면 약간의 사소한 오류가 있었는지 잘 모르겠습니다.

죄송합니다. 도와 주신 분들께 감사드립니다.

+0

이전에는 발신자를 올바르게 또는 전혀 전송하지 않았을 수 있습니까? 성공적인 코드에서 CityGuideAnnotation으로 캐스트 한 것을 보았지만 예제에서는 아닙니다. – CodaFi

+0

'annotate'의 선언과 구현을 제공하십시오. 속성은 ivars를 설정하기위한 것이며,'x.annotate = y'에 해당하는 setter 메소드는'[x setAnnotate : y]'여야합니다. – jrturton

답변

0

오류 속성을 사용하여 코드에 없었다. 나는 포인터로 nil을 보여주는 디버거에 속았다. 나는 미래에 가치를 기록하는 데 더욱주의를 기울일 것이다.

자세한 내용은 위 질문에서 편집을 참조하십시오.

1

주석이 대상 vc의 개인 속성 인 경우 보낸 사람 VC는 사용자가 설정 한 주석 : 메서드를 제외하고는 해당 속성에 액세스 할 수 없습니다. prepareForSegue는 destinationVC에 특별한 액세스를 제공하지 않습니다.이 경우 private 속성입니다. 도트 표기법을 사용하려면 주석을 공개 API의 일부로 노출해야합니다. 내가

행운을 빕니다 :-) 제대로 질문을 이해 바랍니다

,

데미안

+0

불행히도 그것은 개인적인 것이 아니 었습니다. 또한 컴파일러는 오류를 발생시키지 않고 flipside.annotation을 설정하지 않았습니다. – Djehuty

+1

UI 콘센트입니까? outlet은 prepareForSegue 동안 대상 vc에 연결되지 않습니다. –

+0

도움 주셔서 감사합니다 Damien, 죄송합니다. 디버거를 빨리 이해하지 못했습니다. – Djehuty

관련 문제