У меня было то же требование, что и вы несколько дней назад. Сначала я пошел с уведомлениями, те, которые вы отправляете и получаете с помощью [NSNotificationCenter defaultCenter]
. Но у меня были проблемы с этим подходом, по некоторым причинам я нашел это ненадежным и трудно отлаживаемым.
Тогда я реализовал что-то вроде этого: у меня есть класс, который обрабатывает все мои пользовательские уведомления. Этот класс хранит некоторые массивы наблюдателей, например, массив содержит некоторые контроллеры представлений, которые хотят получать уведомление об определенном событии, а другой массив содержит некоторые контроллеры представлений, которые хотят получать уведомление о другом событии.
Когда вы создаете контроллер своего вида, который должен быть наблюдателем какого-либо события, вы добавляете контроллер в соответствующий массив этого класса менеджера.
И затем, когда событие происходит в вашем делете приложения, вы сообщаете этому классу менеджера уведомлять обо всех наблюдателях наблюдателя этого события. Затем этот класс менеджера выполняет итерацию в связанном массиве и вызывает некоторые определенные методы этих наблюдателей. Итак, для этого каждый контроллер представления, который заинтересован в одном и том же событии, должен иметь открытый метод с тем же именем, чтобы менеджер уведомлений мог вызвать это.
Это может быть улучшен, конечно, как иметь эти контроллеры представлений, которые имеют те же интересы, реализовать протокол и т.д ..
Вот краткое описание того, что я имею в виду. Это мое уведомление менеджер Класс:
@interface NotificationUtility : NSObject
+(NSMutableArray *)getCallDurationObservers;
+(void)notifyCallDurationObservers;
@end
Это является частью реализации:
#import "NotificationUtility.h"
static NSMutableArray *callDurationObservers = nil;
@implementation NotificationUtility
+(NSMutableArray *)getCallDurationObservers {
if (callDurationObservers) {
return callDurationObservers;
}
callDurationObservers = [[NSMutableArray alloc] init];
return callDurationObservers;
}
+(void)notifyCallDurationObservers {
for (TestViewController *observer in callDurationObservers) {
[observer performSelector:@selector(updateCallDuration)];
}
}
@end
И это, где я добавить свои контроллеры представлений, которые заинтересованы в соблюдении продолжительности вызова, для наблюдателей этого менеджера массив:
- (void)arrangeCallDurationObservers {
NSMutableArray *callDurationObservers = [NotificationUtility getCallDurationObservers];
[callDurationObservers removeAllObjects];
[callDurationObservers addObject:_detail];
[callDurationObservers addObject:_callReport];
}
Я бы пошел с уведомлениями - вы можете позже переместить задание cron в любом месте и не переписывать делегатов и протоколы. NSNotifications просты в реализации и преуспевают в таких сценариях. –