2015-05-20 2 views
-2

Я пытаюсь вызвать метод из класса NSObject из моего AppDelegate. Обычно это работает, если вы звоните из UIViewController, но не повезете в AppDelegate. Мой код:Вызов метода класса NSObject из делегата приложения

AppDelegate.m

#import "ACManager.h" 

@implementation AppDelegate { 
    ACManager *acManager; 
} 

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
[acManager login]; 
} 

ACManager.h

@interface ACManager : NSObject 

-(void)login; 

@end 

ACManager.m

+(ACManager*)sharedInstance { 
    static ACManager *sharedInstance; 
    @synchronized(self) { 
     if (!sharedInstance) { 
      sharedInstance = [[self alloc]init]; 
     } 
    } 
    return sharedInstance; 
} 

-(void)login 
{ 
    NSLog(@"login run"); 
} 

@end 

Любые идеи, спасибо. Есть ли другой способ обойти это при вызове из делегата приложения?

+0

Не имеет отношения к вопросу, но вы можете заменить свою реализацию sharedInstance на предлагаемую здесь. https://stackoverflow.com/questions/5720029/create-singleton-using-gcds-dispatch-once-in-objective-c – wjl

ответ

5

Для одноточечного вам нужно использовать:

[[ACManager sharedInstance] login]; 

или присвоить значение переменной:

acManager=[ACManager sharedInstance]; 

, а затем, звоните:

[acManager login]; 
+0

ah nice, отлично работает. Спасибо. – George99999

+0

Добро пожаловать. –

2

Вы говорите:

[acManager login]; 

Таким образом, вы отправляете сообщение с экземпляром acManager. Но acManager - это нуль! Вы забыли предоставить фактический экземпляр ACManager и поместить его в этот слот (назначьте его переменной).

Таким образом, ничего не происходит.

+0

Каким будет это решение? – George99999

+0

Основное понимание переменных и экземпляров в Objective-C было бы хорошим. :) – matt

+0

«Каким будет это решение?». Но вы сказали, что это работает, если вы звоните с контроллера. Я не груб, но если вы можете заставить его работать с контроллером представления, но потом не может заставить его работать от делегата, а также спросить, как заставить его работать, тогда вам действительно нужно чтобы прислушаться к советам матушки и сделать паузу, и сначала сделать немного базового чтения. Удачи ;-) – Gruntcakes

Смежные вопросы