Связь между делегатом приложения и VC

#iphone #objective-c #cocoa-touch #delegates

#iPhone #objective-c #cocoa-touch #делегаты

Вопрос:

У меня есть метод в моем делегате приложения, который обновляет количество значков для значка приложения. Я хочу, чтобы этот метод также обновлял что-то в другом VC, который виден во всем приложении (например, в центре уведомлений) У меня есть.

Как я могу это сделать?

Метод выглядит следующим образом:

 - (void) remedyERxInterface:(RSeRxInterface *)eRxInterface 
             didSynchronize:(BOOL)success pendingMessageCounts:(NSDictionary *)pendingMessageCounts {

    NSInteger messageTotal = 0;
    NSInteger refillRequests = [[pendingMessageCounts objectForKey:kRSQueuesRefillCount] intValue];
    NSInteger problems = [[pendingMessageCounts objectForKey:kRSQueuesProblemCount] intValue];
    NSInteger messages = [[pendingMessageCounts objectForKey:kRSQueuesMessageCount] intValue];

    if (0) {
        if (self.eRxModuleInboxMessageCount) {
            messageTotal = refillRequests   problems   messages;
        } else {
            messageTotal = refillRequests   problems   messages   12;
        }
    } else {
        //Production
        messageTotal = refillRequests   problems   messages;
    }

    [UIApplication sharedApplication].applicationIconBadgeNumber = messageTotal;
    self.eRxModuleInboxMessageCount = messageTotal;
}
 

Комментарии:

1. Почему бы не использовать вызов центра уведомлений из любого вызывающего ваш метод обновления значка?

2. Звучит неплохо, не могли бы вы предоставить более подробную информацию.

Ответ №1:

Вы упоминаете центр уведомлений. Рассматривали ли вы возможность использования NSNotifications через NSNotificationCenter? Для центрального объекта идеально передавать информацию, не зная, кто ее слушает. Вы можете просто зарегистрировать свои контроллеры просмотра для этих уведомлений с обратными вызовами, которые будут вызываться синхронно.

Комментарии:

1. Хорошо, поэтому я могу настроить уведомление при вызове этого метода и передать interger messageTotal другому моему VC. Как именно я должен это сделать в коде? Спасибо

2. Если вы посмотрите на руководство по программированию NSNotification, оно довольно подробное и простое, вы можете передать словарь userInfo с уведомлением, содержащим NSNumber с целым числом, которое вы хотите передать.

Ответ №2:

Если какая-то информация должна быть видна во всем приложении, создайте класс manager, который отвечает за хранение информации. Создайте удобный метод для доступа к общему экземпляру этого класса. Когда происходит событие, которое означает, что вам необходимо обновить информацию, сообщите об этом событии общему экземпляру. Для всех частей вашего пользовательского интерфейса, которые должны отображать эту информацию, используйте Key-Value Observing (KVO) для общего экземпляра, чтобы получать уведомления при изменении любого из его свойств.

Комментарии:

1. У меня уже есть весь код. Мне просто нужно, чтобы он обновлял значок на UIButton в другом VC, когда этот метод запускается из делегата приложения.