从AppDelegate Objective-C IOS调用someClass中的方法

我试图从AppDelegate类调用someClass里面的方法。 我通常创build一个实例,然后使用该实例,调用该方法。 像这样:

FFAppDelegate *delegate = (FFAppDelegate *) [[UIApplication sharedApplication] delegate]; [delegate someMethod]; 

我在代码中使用了^^,它完美的工作。 我想要做的是切换它。 我不想调用AppDelegate内部的方法,而想调用AppDelegate中另一个类中的方法。

 SomeClass *test = (SomeClass *) [[UIApplication sharedApplication] delegate]; [test someMethod]; 

在这种情况下,我不断收到“终止应用程序由于未捕获的exception”NSInvalidArgumentException“”错误,由于“无法识别的select器发送到实例”。

任何关于此事的灯光将不胜感激! 🙂

实例化要发送请求的类的实例,并将该方法设为public(在.h文件中)。 然后将该类导入到应用程序委托中并调用它。

像这样…

  YourClass * yourClassInstance = [[YourClass alloc] init]; [yourClassInstance someMethod]; 

在@interface下面的YourClass.h中,你将声明这样的方法

  -(void)someMethod; 

所以任何人都可以访问它。

[[UIApplication sharedApplication] delegate]; 返回你的AppDelegate类,而不是SomeClass

你可以这样使用:

 FFAppDelegate *delegate = (FFAppDelegate *) [[UIApplication sharedApplication] delegate]; [delegate someMethodForSomeClass]; 

然后在你的AppDelegate代码中,像这样的someMethodForSomeClass

 - (void)someMethodForSomeClass { SomeClass *someClass = _yourSomeClass; [someClass someMethod]; } 

例如,如果您只想创buildAlertView一次,并在任何UiViewController中使用它

所以,你可以使方法为UIAlertView和调用你想要的方法

1)在你的appDelegate.h文件中

 @property (nonatomic, strong) UIAlertView *activeAlertView; 

2)在你的AppDelegate.m文件中

 -(void)openAlert { NSString *strMsgPurchase = @"Write your message"; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Buy" message:strMsgPurchase delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Buy",@"Restore", nil]; [alert setTag:100]; [alert show]; self.activeAlertView = alert; } 

3)调用你想要的uiview的方法

 [((AppDelegate *)[[UIApplication sharedApplication] delegate])openAlert]; 

注意:在Appdelegate.h文件中定义– (void)openAlert方法