РЕШЕНИЕ НИЖЕ - Не проблема, я так и думал.Невозможно установить свойство в prepareForSegue: отправитель:
Я добавляю данные к контроллеру вида, который вызывается, используя prepareForSegue: sender :, но проблема в том, что если данные заданы с использованием свойства, то это свойство не изменяется. Однако я могу использовать закрытую переменную контроллера представления назначения, используя функцию, созданную для этой цели.
Вот код, который работает:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showLocationDetail"]) {
CityGuideFlipsideViewController *flipside = [segue destinationViewController];
CityGuideAnnotation *senderAnnotation = (CityGuideAnnotation *)sender;
[flipside annotate:senderAnnotation]; // why?
}
}
кажется гораздо более естественным, однако, использовать flipside.annotate = senderAnnotation
чем [flipside annotate:senderAnnotation]
.
Конечно, я должен делать что-то очевидное здесь, но я не могу это заметить.
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;
Достигнув линии назначая flipside.annotation, как senderAnnotation значение senderAnnotation правильно. flipside.annotation перед назначением - nil. Вслед за этой строкой senderAnnotation не изменяется, flipside.nnation не изменяется.
НО, достигнув CityGuideFlipsideViewController viewDidLoad У меня есть NSLog(@"%@",annotation.title)
, который выплескивает правильное значение, хотя отладчик все еще показывает мне ноль для аннотации.
Так что я действительно не уверен, что раньше у меня была небольшая ошибка, если я все время обманывал annotation CityGuideAnnotation * 0x00000000
в отладчике.
Извините, и спасибо тем, кто помог.
Возможно ли, что раньше вы не отправляли отправителя правильно или вообще. Я заметил, что вы добавили его в CityGuideAnnotation в успешный код, но не в этом примере. – CodaFi
Пожалуйста, дайте объявление и реализацию «аннотировать». Свойства предназначены для установки ivars, а эквивалентный метод setter для 'x.annotate = y' должен быть' [x setAnnotate: y] '. – jrturton