Как выполнить внутреннюю функцию объекта - PullRequest
1 голос
/ 12 июля 2011

Итак, я довольно новичок в объектно-ориентированном программировании, и я пытаюсь сделать следующее в xcode - у меня есть контроллер представления MyMap.m, где я отображаю ваше местоположение и теперь хочу добавить погоду.Для этого я хотел бы отправить координату в класс геокодера, который сначала вернет почтовый индекс.Я решил подогреть его с помощью классов, поэтому создал класс, который будет возвращать почтовый индекс.

код в контроллере карты:

.....

  MKPlacemark *zip;
    getzip = [[GetZipcode alloc] init]; //ADDED THIS

[getzip reverseGeocodeCurrentLocation];
zip = getzip.myPlacemark;
NSLog(@"Placemark is: %@", zip);

....

, где getzip является экземпляромкласс GetZipcode:

@interface MyMap : UIViewController <MKMapViewDelegate, MyLocationControllerDelegate> {

              GetZipcode *getzip;
 //and more stuff
 }

По какой-то причине ничего не произошло, когда я запустил это:

[getzip reverseGeocodeCurrentLocation];

, который reverseGeocodeCurrentLocation является функцией внутри класса GetZipcode:

.h

- (void)reverseGeocodeCurrentLocation;

, и .m этого класса:

- (void)reverseGeocodeCurrentLocation
{
self.reverseGeocoder = [[[MKReverseGeocoder alloc] init] autorelease];
reverseGeocoder.delegate = self;
[reverseGeocoder start];
}



- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
PlacemarkViewController *placemarkViewController = [[PlacemarkViewController alloc] initWithNibName:@"PlacemarkViewController" bundle:nil];
placemarkViewController.placemark = placemark;
myPlacemark = placemark;
NSLog(@"Placemark is: %@", placemark.postalCode);
 }

Надеюсь, что это не TMI, но я был бы очень признателен за помощь здесь.Спасибо!

1 Ответ

3 голосов
/ 12 июля 2011

Вы не дали MKReverseGeocoder координату для обратного геокодирования.

Назначенный инициализатор - [MKReverseGeocoder initWithCoordinate:], через который вы вводите координату.

Надеюсь, что поможет

(также, конечно, проверьте, что вы создали и инициализировали свой экземпляр GetZipcode, и что getzip не равен nil, когда вы пытаетесь его использовать.)

РЕДАКТИРОВАТЬ:

Вы создали переменную экземпляра (ivar) с именем getzip.Но вы не опубликовали код, который создает экземпляр GetZipcode и помещает этот адрес в указатель getzip.Где-то у вас должно быть что-то вроде:

getzip = [[GetZipcode alloc] someAppropriateInit];

ВТОРОЕ РЕДАКТИРОВАНИЕ

Итак, еще пара вещей, о которых стоит подумать.(1) На самом деле вы не можете сразу прочитать свойство метки, как пытаетесь сделать это здесь:

zip = getzip.myPlacemark;

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

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

(2) Вам следует также реализовать этот обратный вызов, чтобы вы могли увидеть, не возникла ли проблема с поиском метки:

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error

(3) Вы уверены, что передаете правильную координату обратному геокодеру?Вы можете записать это, чтобы быть абсолютно уверенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...