我想在AppDelegate.m中调用ViewController
的方法。
我在Viewcontroller
中有方法method()。我希望在appdelegate.m
中调用didSelectMethod()时调用它。
我已经调用了这样的方法.-
ViewController *vc=[[ViewController alloc]init];
[vc method];
调用方法,但没有与实际方法相同的实例。
它具有所有nill
个值。任何人都可以为我提供正确的代码。
谢谢 Jagveer Rana
答案 0 :(得分:4)
虽然对于视图控制器为rootViewController
的情况已经正确回答了这个问题,但为了完整起见,您可以在这里使用任何视图控制器:
// ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
- (void)myMethod;
@end
// ViewController.m
#import "ViewController.h"
#import "AppDelegate.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.myViewController = self;
}
- (void)myMethod
{
NSLog(@"Doing something interesting");
}
// AppDelegate.h
#import <UIKit/UIKit.h>
#import "ViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (weak, nonatomic) ViewController *myViewController;
@end
// AppDelegate.m
#import "AppDelegate.h"
@implementation AppDelegate
- (void)applicationDidEnterBackground:(UIApplication *)application {
[self.myViewController myMethod];
}
答案 1 :(得分:2)
在应用中获取anyViewController相同实例的最简单方法是逐个跟踪它... 喜欢你应用中的任何viewController
[[[UIApplication sharedApplication] keyWindow] rootViewController];
或来自appDelagate
self.window.rootViewController;
它会给你rootViewController然后从这个rootViewController跟踪你想要的viewController。
答案 2 :(得分:1)
在您的问题中,您创建了一个新的视图控制器实例,该实例不属于视图层次结构,因此您不会通过调用该方法(UI-wise)看到任何效果。 (也没有通过xib / storyboard初始化,所以你的UI元素可能是零)
只要它是根视图控制器,您就可以通过窗口访问它(否则您必须在创建时找到它或保留对它的引用):
ViewController *vc = (ViewController *)self.window.rootViewController;
[vc method];
答案 3 :(得分:1)
首先,您已在Appdelegate.h中声明了ViewController类,并在AppDelegate.h中创建了UIViewController类的对象,如下所示
@class yourViewControllerClass;
@property (nonatomic,strong) yourViewControllerClass *obj1;
现在在AppDelegate.m中导入ViewController类,就像这样
#import yourViewControllerClass.h;
现在在AppDeledate.m的方法applicationDidFinishLaunchingOption中:创建viewController的新对象并将其分配给obj1,就像这样
yourViewControllerClass *obj2 = [[yourViewControllerClass alloc]init];
obj2 = self.obj1
借助此代码,您可以在viewcontrollers或objects之间解析数据。现在,在ViewController类的.m文件中,您必须导入Appdelegate.h并将viewController对象中的所有数据解析为obj1,obj1将解析该数据到obj2(使用上面的代码)。[假设你的viewController类的对象为OBJ]。
#import AppDelegate.h
AppDelegate *ad = [[AppDelegate alloc]init];
ad.obj1 = OBJ
注意 - 我还没有测试过这段代码。请先将你的项目保存在其他地方......根据我的知识回答......希望这会对你有所帮助。谢谢你
答案 4 :(得分:0)
在.pch文件中编写此代码
#import "AppDelegate.h"
#define DELEGATE ((AppDelegate*)[[UIApplication sharedApplication]delegate])
在任何想要调用Delegate方法的ViewController中,只需编写此代码即可。
[DELEGATE methodname];