Не могу установить свойство в prepareForSegue: sender: - PullRequest
0 голосов
/ 29 февраля 2012

РЕШЕНИЕ НИЖЕ - Не совсем та проблема, о которой я думал.

Я добавляю данные в контроллер представления, в который выполняется переход, используя 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].

Конечно, я должен делать что-то очевидное здесь, но я не могу определить это.

РЕДАКТИРОВАТЬ, чтобы более четко указать случай неудачи:

// 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 до назначения ноль.После этой строки senderAnnotation не изменяется, flipside.annotation не изменяется.

НО, достигая CityGuideFlipsideViewController viewDidLoad У меня есть NSLog(@"%@",annotation.title), который выдает правильное значение, даже если отладчик по-прежнему показывает мне ноль для аннотации.

Так что я действительно не уверен, что у меня ранее была какая-то небольшая ошибка, если все время меня обманывали annotation CityGuideAnnotation * 0x00000000 в отладчике.

Извините, и спасибо тем, кто помог.

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Если аннотация является частным свойством на целевом виртуальном канале, тогда виртуальный контроллер отправителя не может получить к нему доступ (кроме настроенного вами метода annotate:).prepareForSegue не предоставляет какого-либо специального доступа к destinationVC, в данном случае частной собственности.Если вы хотите использовать точечную нотацию, вам необходимо предоставить аннотацию как часть общедоступного API.

Надеюсь, я правильно понял ваш вопрос: -)

Удачи,

Дэмиен

0 голосов
/ 29 февраля 2012

Ошибка не в коде, использующем свойство.Я был одурачен отладчиком, показывающим ноль в качестве указателя.Я буду более осторожным, чтобы записывать значения в будущем.

Подробнее см. В редактировании по вопросу выше.

...