Преобразование VOID-кода в IBAction - PullRequest
0 голосов
/ 10 июня 2011

У меня есть код получателя местоположения, и я хочу поместить его в IBAction, но у него много - (VOID) в нем. Как использовать тот же код, но поместить его в один IBAction.

Вот действие:

о

Вот код, который я хочу вставить в него:

 @synthesize locationManager, delegate;

    BOOL didUpdate = NO;

    - (void)startUpdates
    {
    NSLog(@"Starting Location Updates");

    if (locationManager == nil)
        locationManager = [[CLLocationManager alloc] init];

    locationManager.delegate = self;

    // You have some options here, though higher accuracy takes longer to resolve.
    locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;  
    [locationManager startUpdatingLocation];    
    }



    - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
    {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Your location could not be determined." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [alert show];
    [alert release];      
    }

    // Delegate method from the CLLocationManagerDelegate protocol.
    - (void)locationManager:(CLLocationManager *)manage didUpdateToLocation:(CLLocation     *)newLocation fromLocation:(CLLocation *)oldLocation
    {
    if (didUpdate)
        return;

    didUpdate = YES;

    // Disable future updates to save power.
    [locationManager stopUpdatingLocation];

    // let our delegate know we're done
    [delegate newPhysicalLocation:newLocation];
    }

    - (void)dealloc
    {
    [locationManager release];

    [super dealloc];
    }

    @end

1 Ответ

1 голос
/ 10 июня 2011

Возможно, вы захотите прочитать, что означает слово IBAction;это просто причудливый термин для void, используемый в обоих случаях:

- (void)startUpdates;

и

- (IBAction)buttonClick:(id)sender;

, что означает «не возвращает значений или объектов».под «помещением в IBAction» вы подразумеваете, что кнопка пользовательского интерфейса или аналогичный элемент инициируют выборку местоположения и соответственно обновляют пользовательский интерфейс.Это невозможно напрямую, так как местоположение является асинхронным вызовом.Вы можете легко создать синхронную оболочку, которая будет блокировать все другие операции, пока не будут возвращены данные о местоположении, но это настоятельно не рекомендуется.Вместо этого при работе с местоположением, как правило, лучше спроектировать ваше приложение, чтобы предоставить пользователю индикатор того, что вычисления происходят (счетчик / индикатор выполнения), а затем обновлять пользовательский интерфейс, когда ваш обратный вызов местоположения возвращается.может выглядеть примерно так:

- (IBAction)locationButtonClick:(id)sender {
  self.spinner.hidden = NO;
  [self.spinner startAnimating];

  self.myLocationManager.delegate = self;
  [self.myLocationManager startUpdates];
}

- (void)newPhysicalLocation:(id)newLocation {
   //TODO: Update UI
   [self.spinner stopAnimating];
   self.spinner.hidden = YES;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...