Можно ли создать подкласс UILocalNotification и изменить текст и метод кнопки «Закрыть» по умолчанию? - PullRequest
0 голосов
/ 20 декабря 2011

Поиск способа изменить «Закрыть» текст кнопки / функциональность UILocalNotification ...

Я обнаружил, что невозможно получить доступ / вызвать текст / функцию из другого объекта, хотя подклассы UILocalNotification должны позволять методу реализации переопределять .. ... не говоря уже о создании средства доступа для получения / установки текстового поля кнопки "Закрыть" .

Что вы, ребята, думаете об этом? Что бы Apple?

Кто-нибудь пробовал? ...

РЕДАКТИРОВАТЬ: 21.12.2011 12:01

Вопрос, который я задаю, включает в себя понимание oop: поздняя / ранняя привязка, динамический поиск метода, и объявленный тип против поля типа времени выполнения и обработка метода.

Подкласс UILocalNotification делает работает ...

UILocalNotificationExampleSubclass * example = [UILocalNotificationExampleSubclass init];

... и устройство создает объект, однако, с типом UILocalNotification, а не UILocalNotificationExampleSubclass.

Я ищу информацию о методах файла UILocalNotification.m.

Если не не имеет своих собственных методов, какой объект (назовите, пожалуйста) принимает экземпляр UILocalNotification, использует его поля и отображает объект (имя пожалуйста) мы видим на экране?

1 Ответ

9 голосов
/ 21 декабря 2011

A UILocalNotification - это просто хранилище для информации уведомления. Он ничего не выполняет.

Кроме того, ваше приложение не отображает уведомление. Другой процесс делает. Так что подклассы UILocalNotification просто бесполезны.

РЕДАКТИРОВАТЬ 22 декабря, 17:53 UTC + 1:

Да, вы можете подкласс UILocalNotification. Но UILocalNotification является абстрактным классом, и ни одно из его свойств не реализовано. Метод alloc переопределен, поэтому он возвращает экземпляр UILocalNotification, частного подкласса. Вот почему вы не можете создать экземпляр UILocalNotificationExampleSubclass.

Но все же, нет никакого смысла в подклассе UILocalNotification, потому что, когда вы планируете уведомление с помощью -[UIApplication scheduleLocalNotification:] или представляете уведомление немедленно с использованием -[UIApplication presentLocalNotification:], операционной системы копий уведомлений.

Эта копия хранится в другом процессе, управляемом системой, который использует свой собственный механизм частного хранения. UILocalNotification - это просто хранилище для набора свойств, предназначенных для сериализации и отправки из приложения в операционную систему.

Теперь у нас есть другой процесс, хранящий все запланированные локальные уведомления и ожидающий срабатывания уведомления. Когда это произойдет, этот процесс проверит, находится ли ваше приложение на переднем плане.

  • Если ваше приложение не находится на переднем плане, этот другой процесс, который полностью вне нашего контроля, создаст предупреждение и отобразит уведомление. Мы не можем настроить это предупреждение любым способом, кроме как с помощью свойств класса UILocalNotification.
  • Если ваше приложение находится на переднем плане, уведомление будет отправлено обратно в приложение, которое создаст новый экземпляр UILocalNotification. Затем общий экземпляр UIApplication получит доступ к свойству delegate и проверит, реализует ли этот делегат application:didReceiveLocalNotification:. Если это произойдет, вы получите уведомление обратно и можете сделать все, что вы хотите с этим уведомлением. Например, вы можете выбрать отображение уведомления с использованием представления предупреждений.

Настройка и отображение вида оповещения может быть выполнена следующим образом:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    UIAlertView *alertView =
    [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Alert", nil)
                               message:NSLocalizedString(notification.alertBody, nil)
                              delegate:nil
                     cancelButtonTitle:nil
                     otherButtonTitles:NSLocalizedString(@"OK", nil), nil];
    [alertView show];
    [alertView release]; // unless your project uses Automatic Reference Counting
}

Я надеюсь, что этот более длинный ответ действительно ответил на ваш вопрос, , если то, что я говорю, верно .

...