Как вернуть значение из объекта в объекте c? - PullRequest
0 голосов
/ 12 июля 2011

Я создал объект, который получает координату и должен вернуть метку после обратного геокодирования.Проблема в том, что этот метод является асинхронным, поэтому мне нужен способ вернуть метку, как только она была найдена.В моем контроллере представления я называю это:

[getzip reverseGeocodeCurrentLocation:coordinate];

, где getzip является экземпляром объекта, который реализует это (который все еще пуст в моем случае ....):

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark

Теперь, как только я попаду в reverseGeocoder: didFindPlacemark, как я могу вернуть метку обратно в viewcontroller?

Я пытался сделать то же самое, что и в некоторых примерах, которые выполняются с LocationManager, где вызывается метод locationUpdate из locationManager: didUpdateToLocation: fromLocation, и реализует locationUpdate в viewcontroller, но это не удаетсяРабота.Другими словами, я сделал это:

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
[self.delegate setPlacemark:placemark];
}

и реализовал setPlacemark в viewcontroller, но по какой-то причине он не получает setPlacemark (кстати, метка верна, когда я вызываю setPlacemark: placemark в reverseGeocoder).

Спасибо!

1 Ответ

1 голос
/ 12 июля 2011

Согласно вашим комментариям, self.delegate равно nil при выполнении [self.delegate setPlacemark:placemark]; в reverseGeocoder:didFindPlacemark:. Поэтому ничего не происходит.

Вы должны установить свойство delegate для вашего контроллера представления перед вызовом reverseGeocoder:didFindPlacemark:. Если переменная getzip в вашем контроллере представления является экземпляром класса, который реализует reverseGeocoder:didFindPlacemark: (GetZipCode?), Вы должны сделать это в вашем контроллере представления:

getzip.delegate = self;

Как я уже сказал в своем комментарии, если ваш контроллер представления соответствует протоколу GetZipcodeDelegate, это означает, что ваш контроллер представления может быть делегатом, потому что он отвечает на сообщения, которые может делегировать объект, который делегирует отправить его делегату. Это не значит, что он является делегатом.

...