2013-03-14 2 views
0

У меня есть метод, который дает мне некоторые проблемы. Я пытаюсь выполнить два метода один за другим, но второй метод продолжает работу до того, как первый закончен. Я вполне уверен, что это связано с тем, что в первом методе есть блок, но поскольку я не очень хорошо их понимаю, я не смог его исправить или даже использовать другие ответы здесь. Любая помощь или совет будут действительно оценены!Пытается заставить метод ждать завершения другого метода

метод верхнего уровня:

- (IBAction)SendTextTapped:(id)sender{ 
    NSLog(@"Entered tapped method"); 
    [self setLocation]; 
    NSLog(@"Supposedly past setLocation"); 
    [self sendInAppSMS:globalLocation]; 
    } 

первый вспомогательный метод:

- (void)setLocation{ 
    CLLocation *location = locationManager.location; 
    CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
    CLLocation *newerLocation =[[CLLocation alloc]initWithLatitude:location.coordinate.latitude 
                 longitude:location.coordinate.longitude]; 
    NSLog(@"%f",location.coordinate.longitude); 
    [geocoder reverseGeocodeLocation:newerLocation completionHandler:^(NSArray *placemarks, NSError *error) { 
    if (error) { 
     NSLog(@"Geocode failed with error: %@", error); 
     return; 
    } 
    //NSLog(@"Entered geocoder"); 

    if (placemarks && placemarks.count > 0) { 
     CLPlacemark *placemark = placemarks[0]; 

     NSDictionary *addressDictionary = 
     placemark.addressDictionary; 

     NSLog(@"%@ ", addressDictionary); 
     NSString *address = [addressDictionary objectForKey:(NSString *)kABPersonAddressStreetKey]; 
     globalLocation=[NSString stringWithFormat:@"pickup: %@, %@\n person: Joe Blow", address,placemark.subLocality]; 
     NSLog(globalLocation); 
     dispatch_async(dispatch_get_main_queue(), ^{}); 
    } 
    }]; 

} 

второй вспомогательный метод:

-(void) sendInAppSMS:(NSString *)message 
{ 
    NSLog(@"Entered sendInAppSMS"); 
    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init]; 
    if([MFMessageComposeViewController canSendText]) 
    { 
     controller.body = message; 
     controller.recipients = [NSArray arrayWithObjects:@"123456", nil]; 
     controller.messageComposeDelegate = self; 
     [self presentViewController:controller animated:YES completion:nil]; 
    } 
} 

Это все работает хорошо, когда у меня есть весь код в одном метод, но для продолжения моего проекта мне нужно уметь отделять действия.

Спасибо за любую помощь, которую вы можете дать!

ответ

0

Вы должны назвать это так:

[self setLocationWithCompletionHandler:^(NSString *message) { 
    [self sendInAppSMS:message]; 
}]; 

Преобразование вам способ это:

- (void)setLocationCompletionHandler:(void (^)(NSString *message))completionHandler{ 
    .... 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     if (completionHandler) completionHandler(globalLocation); 
    }); 
} 
+0

я просто попытался это, и она не работает, либо. Что-то странное передается сообщению в методе sendInAppSMS: <__ NSMallocBlock__: 0x2223a620> – mathewwl

Смежные вопросы