В Objective-C нет такого понятия, как статический метод, и классы хранения ваших переменных не имеют ничего общего с тем, что делает UIKit.
Вот что вы сделали:
- Вы реализовали метод класса и создали в нем оповещение.
- В этом методе вы устанавливаете делегат оповещения как
self
;так как это в методе класса, self
является классом, что означает, что вы устанавливаете делегат оповещения в класс ShowAlert
. - Вы показали оповещение.Поскольку делегат оповещения - класс ShowAlert - не отвечает на
willPresentAlertView:
, оповещение не пытается отправить это сообщение.
«Что!», Говорите вы.«Я реализовал willPresentAlertView:
!»
Ну, да, вы реализовали его как экземпляр метод.Таким образом, экземпляры ShowAlert отвечают на это сообщение.Но делегат оповещения не является экземпляром ShowAlert;это сам класс ShowAlert, который не отвечает на это сообщение, потому что вы реализовали его как метод экземпляра, а не метод класса.
Я не понимаю, почему вы создали класс для этого впервое место.Разве все, что хочет показать предупреждение, не должно создавать, быть делегатом и показывать само предупреждение?Зачем ставить другой класс между?(Обратите внимание, что классы, как правило, следует называть именами существительными, а не глаголами; имя этого класса «ShowAlert» подсказывает мне, что вы здесь что-то делаете неправильно.)
Если вы настаиваете на этомкласс, вы должны либо создать каждый экземпляр, быть его делегатом и показать UIAlertView (и, соответственно, сделать alert
переменную экземпляра, а не статическую переменную в файле реализации), либо заставить класс отвечать на willPresentAlertView:
изменив свою реализацию из метода экземпляра в метод класса.