Отправлять уведомление, когда операция была завершена в одном классе? - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть два класса, класс A и класс B.

У класса A есть метод

 -(void)methodA:(id)sender
{

}

, а у класса B есть метод

-(void)methodB:(id)sender
{

}

Сейчасу меня есть какая-то работа, выполняемая в methodA, поэтому, как только она будет завершена, я хочу отправить уведомление от methodA: to methodB: чтобы я мог выполнить некоторую операцию на основе уведомления.

Так как я могу это сделать??Кто-нибудь может направить меня, поскольку я новичок в obj-c?

Ответы [ 3 ]

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

Использовать делегата. Простой код из вики: визит http://en.wikipedia.org/wiki/Delegation_pattern

  • Делегат - это объект, чьи объекты (как правило) вызываются для обработки или реагирования на определенные события или действия.
  • Вы должны «сообщить» объекту, который принимает делегата, которым вы хотите стать делегатом. Это делается путем вызова [object setDelegate: self]; или установка object.delegate = self; в вашем коде.
  • Объект, действующий как делегат, должен реализовывать указанные методы делегата. Объект часто определяет методы либо в протоколе, либо в NSObject через категорию в качестве методов по умолчанию / пустых, либо в обоих. (Подход с использованием формального протокола, вероятно, более чистый, особенно сейчас, когда Objective-C 2.0 поддерживает дополнительные методы протокола.)
  • Когда происходит соответствующее событие, вызывающий объект проверяет, реализует ли делегат соответствующий метод (используя -respondsToSelector :), и вызывает этот метод, если это так. Затем делегат может сделать все возможное, чтобы ответить, прежде чем вернуть управление вызывающей стороне.
0 голосов
/ 23 февраля 2012

Зарегистрируйте наблюдателя в классе B, например:

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(method:) name:@"notificationName" object:nil];

И отправьте уведомление из класса A, например:

[NSNotificationCenter defaultCenter] postNotificationName:@"notificationname" object:nil];

Удалите наблюдателя из вашего класса B, когда он освобожденкак

[[NSNotificationCenter defaultCenter]removeObserver:self];
0 голосов
/ 23 февраля 2012

Самый простой способ.

В классе B -(id)initWithNibName: Bundle: вам нужно будет добавить регистрацию для NSNotifications.

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
 {
      self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
      if (self) {

         // Custom initialization        
         [[NSNotificationCenter defaultCenter] addObserver:self 
                                                  selector:@selector(methodB:) 
                                                      name:@"methodAFinished" 
                                                    object:nil];

      }

      return self;

}

И затем вам нужно сделать следующее в методе класса A A.: function.

 - (void)methodA:(id)sender {

       // Once you have completed your actions do the following

       [[NSNotificationCenter defaultCenter] postNotificationName:@"methodAFinished" object:nil];

 }

 - (void)methodB:(id)sender {

      // This will then be called in the other class, do whatever is needed in here.

 }

Надеюсь, что это работает для вас!

Кроме того, не забывайте, что в -(void)viewDidDisappear:animated функции класса B вам необходимо отменить регистрацию для уведомлений.

 - (void)viewDidDisappear:(BOOL)animated {

       [super viewDidDisappear:animated];
       [[NSNotificationCenter defaultCenter] removeObserver:self];

 }

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

...