从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方法
- 在没有CATiledLayer的情况下在iOS上呈现和缩放大图像
- 哪些任务比GCD更适合NSOperation?
- UICollectionView – 具有pinterest样式布局的Autolayout
- 检测页面是否在JavaScript中的WKWebView中加载
- 推送通知到达时,应用程序徽章图标未更新
- 如何在XCode 4.3.2上创buildIPA
- 调用API客户端的networking请求的通用方法
- localizedCaseInsensitiveContainsString在Swift中不可用
- NSURLSession dataTaskForRequest:完成:发送给实例的无法识别的select器