해결 방법 - 실제로 문제는 아니라고 생각했습니다.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
에 속아왔다면 약간의 사소한 오류가 있었는지 잘 모르겠습니다.
죄송합니다. 도와 주신 분들께 감사드립니다.
이전에는 발신자를 올바르게 또는 전혀 전송하지 않았을 수 있습니까? 성공적인 코드에서 CityGuideAnnotation으로 캐스트 한 것을 보았지만 예제에서는 아닙니다. – CodaFi
'annotate'의 선언과 구현을 제공하십시오. 속성은 ivars를 설정하기위한 것이며,'x.annotate = y'에 해당하는 setter 메소드는'[x setAnnotate : y]'여야합니다. – jrturton