Нет видимого интерфейса для AppDelegate, объявляющего селектор

AppDelegate.h:

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>

+ (MBProgressHUD *)showGlobalProgressHUDWithTitle:(NSString *)title;

AppDelegate.m:

+ (MBProgressHUD *)showGlobalProgressHUDWithTitle:(NSString *)title {
UIWindow *window = [[[UIApplication sharedApplication] windows] lastObject];
[MBProgressHUD hideAllHUDsForView:window animated:YES];
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:window animated:YES];
hud.labelText = title;
return hud;
}

В someOtherMethod в AppDelegate.m:

[self showGlobalProgressHUDWithTitle:@"Checking for Updates"];  //No visible interface for AppDelegate declares the selector 'showGlobalProgressHUDWithTitle:'

Почему? Другие методы в интерфейсе видны, а почему не этот? Это связано с тем, что это метод класса?


person soleil    schedule 12.09.2012    source источник
comment
+ — метод класса, — — метод экземпляра. Вы не выполняете этот метод на себе, вы выполняете его на AppDelegate. Вероятно, вы захотите изменить определение на -.   -  person Stefan H    schedule 12.09.2012
comment
@StefanH, это имеет смысл, но почему я тоже не могу сделать это (из другого класса): AppDelegate appDelegate = (AppDelegate)[[UIApplication sharedApplication] делегат]; [appDelegate showGlobalProgressHUDWithTitle:@независимо];   -  person soleil    schedule 12.09.2012
comment
Поскольку [[UIApplication sharedApplication] delegate] возвращает экземпляр AppDelegate, а не сам класс. Чтобы вызвать метод класса, вам нужно сделать [AppDelegate classMethodName].   -  person Rog    schedule 12.09.2012


Ответы (1)


Вы вызываете метод класса из экземпляра объекта (я).

Измените + на - в объявлении и реализации вашего метода, и вы отсортированы.

person Rog    schedule 12.09.2012